阿 Q 的停車場

問題描述
剛拿到駕照的 KJ 總喜歡開著車到處兜風,玩完了再把車停到阿 Q 的停車場里,雖然 她對自己停車的水平很有信心,但她還是不放心其他人的停車水平,尤其是 Kelukin。于是, 她每次都把自己的愛車停在距離其它車最遠的一個車位。KJ 覺得自己這樣的策略非常科 學,于是她開始想:在一個停車場中有一排車位,從左到右編號為 1 到 n,初始時全部是 空的。有若干汽車,進出停車場共 m 次。對于每輛進入停車場的汽車,會選擇與其它車距 離最小值最大的一個車位,若有多個符合條件,選擇最左邊一個。KJ 想著想著就睡著了, 在她一旁的 Kelukin 想幫她完成這個心愿,但是他又非常的懶,不愿意自己動手,于是就把 這個問題就留給了你:在 KJ 理想的阿 Q 的停車場中,給你車輛進出的操作序列,依次輸 出每輛車的車位編號。

輸入格式
第一行,兩個整數 n 和 m,表示停車場大小和操作數;
接下來 m 行,每行兩個整數 F 和 x F 是 1 表示編號為 x 的車進停車場; F 是 2 表示編號為 x 的車出停車場;
保證操作合法,即: 出停車場的車一定目前仍在停車場里; 停車場內的車不會超過 n;

輸出格式
對于所有操作 1,輸出一個整數,表示該車車位的編號

樣例輸入
7 11
1 15
1 123123
1 3
1 5
2 123123
2 15
1 21
2 3
1 6
1 7
1 8

樣例輸出
1
7
4
2
7
4
1
3

提示
【數據范圍】
對 30%的數據 n<=1000 ,m<=1000 對
60%的數據 n<=200000,m<=2000
對 100%的數據 n,m<=200000,
車的編號小于等于 10^6

分析:
考場上我這個zz想了一種堆的做法,
然而實現起來有缺陷,
后來聽他們說這是一道蠻簡單的線段樹,
感覺自己退役算了。。。

根據題目的要求,
0號和n+1位是不能視為有車的,
所以這兩個位置需要特判,
一般情況下,只要找出該區間內沒有停車的最遠的區間,
區間長度>>1就是下一輛要停的車與其他車相距的最遠距離
(不知道自己在說什么)

要維護四個量
分別是x,y,mid,p
x表示在當前結點線段樹所在區間,最左邊的車停的位置
同理,y表示做右邊的車所停的位置
mid表示在這個小區間[x,y]中的緊鄰的兩輛車的最長距離除以2后的值
p表示取得mid值是所在的緊鄰的兩輛車的中間位置,也就是在[x,y]中的答案值

網上的代碼都超級**
實在是看不懂,廢了洪荒之力碼完代碼。。。

最復雜的過程就是停車(其實也很好理解):
每一次在新停車的時候,
都查看一下第一個節點的信息(線段樹的根節點記錄的是整個區間的信息)
每輛車都有三個可能停的位置
tree[1].p,1,n
這三個點的停車相聚最遠距離分別是
tree[1].mid,
tree[1].x-1(假使第一個位置沒有停車)
n-tree[1].y(假使最后一個位置沒有停車)

從三個位置中選擇一個最優的添加

update的時候分別維護就好了
tree[bh].x=tree[lc].x;
tree[bh].y=tree[rc].y;
tree[bh].mid和tree[bh].p需要從三個值中擇優:
tree[lc]
tree[rc].mid
tree[rc].y-tree[lc].x+1; //兩個區間之間的空位

這里寫代碼片
#include<cstdio>
#include<iostream>
#include<cstring>using namespace std;const int N=200002;
struct node{int x,y,mid,p;
};
node tree[N<<4];
int n,m;
int car[1000001];  //車的位置,如果你6可以加離散化啊 void update(int bh)
{int lc=bh<<1;int rc=(bh<<1)+1;if (bh){tree[bh].x=tree[lc].x;tree[bh].y=tree[rc].y;tree[bh].mid=tree[lc].mid;tree[bh].p=tree[lc].p;if (tree[rc].mid>tree[bh].mid){tree[bh].mid=tree[rc].mid;  tree[bh].p=tree[rc].p;}int l=tree[rc].y-tree[lc].x+1;  //兩個區間之間的空位if (l>tree[bh].mid){tree[bh].mid=l;tree[bh].p=(tree[lc].y+tree[rc].x)>>1;} }return;
}void add(int bh,int l,int r,int wz,int z)
{if (l==wz&&l==r){if (z==1){tree[bh].x=l;tree[bh].y=r;tree[bh].mid=0;   //節點上有車了,當然就沒有mid和p值了 tree[bh].p=0;return;}else{tree[bh].x=0;tree[bh].y=0;tree[bh].mid=0;tree[bh].p=0;return;}}int mid=(l+r)>>1;if (wz<=mid) add(bh<<1,l,mid,wz,z);if (wz>mid) add((bh<<1)+1,mid+1,r,wz,z);update(bh);
}int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){int opt,u;scanf("%d%d",&opt,&u);if (opt==1){if (tree[1].x==0)  //整顆線段樹的信息都集中在根節點 {car[u]=1;  //整個停車場都是空的 }else{int mx=-1;if (tree[1].x-1>mx){mx=tree[1].x-1;car[u]=1;  //第一個車位沒人停 }if (tree[1].mid>mx)   {mx=tree[1].mid;car[u]=tree[1].p;}if (n-tree[1].y>mx){   //最后的車位沒人停 mx=n-tree[1].y;car[u]=n;}}printf("%d\n",car[u]);add(1,1,n,1,1); }else{add(1,1,n,car[u],-1);  //出停車場 }}return 0;
}

轉載于:https://www.cnblogs.com/wutongtong3117/p/7673536.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/369983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/369983.shtml
英文地址,請注明出處:http://en.pswp.cn/news/369983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css3圖片垂直居中

圖片相對父元素垂直居中, css3屬性給父級元素設置 display: -webkit-box; -moz-box-align: center; -webkit-box-align: center; -moz-box-pack: center; -webkit-box-pack: center; 需要注意的是&#xff1a; 父級元素要有確定的高度&#xff01;

聲明式的理解【gpt】

一 MyBatis采用了聲明式語法來進行SQL映射配置【mybatis聲明式】 MyBatis是一款優秀的持久層框架&#xff0c;支持自定義SQL、存儲過程以及高級映射&#xff0c;使得開發人員能夠專注于SQL本身而不是數據庫訪問。MyBatis提供了兩種配置方式&#xff1a;XML配置和注解配置&…

網絡局域網看不到其它計算機,局域網中看不到其它計算機怎么辦

通過網上鄰居或查看網絡計算機時&#xff0c;看不到局域網中其它計算機&#xff0c;這是怎么回事呢?下面是學習啦小編給大家整理的一些有關看不到局域網中其它計算機的解決方法&#xff0c;希望對大家有幫助!局域網中看不到其它計算機的解決方法打開“控制面板”-“網絡和Inte…

iconfont 圖標轉為字體_iconfont字體圖標的使用方法--超簡單!

我之前因為項目用bootstrap比較多,所以使用font awesome字體圖標比較多,后來接觸到了iconfont,發現想要的什么圖標都有,還可以自定義圖標,非常強大!之前看了一波教程,覺得繁瑣,自己弄明白后感覺如此簡單,做了這么個簡單教程,直接上圖,簡單粗暴,避免新手走彎路,這里講解的默認是…

一罐來統治所有人

跳下內存通道 早在1998年&#xff0c;當我是一名C / C 開發人員時&#xff0c;嘗試使用Java時&#xff0c;有關該語言的一些內容對我來說就顯得有些惱火了。 我記得很擔心這些 為什么沒有合適的編輯器呢&#xff1f; C / C 有很多。 我為Java擁有的只是舊的記事本。 當我想要…

Django集合Ueditor

語言版本環境&#xff1a;python3.6 1、win安裝步驟&#xff1a; 1 git下載源碼https://github.com/zhangfisher/DjangoUeditor 2 解壓DjangoUeditor3-master.tar 3 cd C:\Users\fj\Desktop\DjangoUeditor3-master 4 python setup.py install 官方建議使用pip install Djang…

計算機二級高級應用考題,2016計算機二級MSOFFICE高級應用考試真題

2016計算機二級MSOFFICE高級應用考試真題離2016上半年的計算機等級考試只有一個多月了&#xff0c;為了幫助大家盡快考試過關&#xff0c;小編整理了計算機二級office考試題&#xff0c;希望能幫助到大家!(1)下列敘述中正確的是A)一個算法的空間復雜度大&#xff0c;則其時間復…

ANTLR –語義謂詞

用antlr解析簡單的語法很簡單 。 您要做的就是使用正則表達式描述您的語言&#xff0c;并讓antlr生成詞法分析器和解析器。 解析大型或復雜的語言有時會需要更多&#xff0c;因為僅使用正則表達式描述它們是困難的&#xff0c;甚至是不可能的。 語義謂詞是在語法內部編寫的Jav…

python輸入一個數組輸出24進制式的時間_4.4 用于數組的文件輸入輸出 線性代數...

Numpy能夠讀寫磁盤上的文本數據或二進制數據。這一小節只討論Numpy的內置二進制格式&#xff0c;因為更多的用戶會使用pandas或其它工具加載文本或表格數據(見第6章)。np.save和np.load是讀寫磁盤數組數據的兩個主要函數。默認情況下&#xff0c;數組是以未壓縮的原始二進制格式…

DBMS-數據庫設計與E-R模型:E-R模型、約束、E-R圖、E-R擴展特性、E-R圖轉換為關系模式、UML建模...

設計過程概覽 1. 設計階段 最初階段&#xff1a;刻畫未來數據庫用戶的數據需求&#xff0c;產品為用戶需求規格說明&#xff1b; 概念設計階段&#xff08;conceptual-design phase&#xff09;&#xff1a;&#xff08;關注描述抽象數據及其聯系&#xff0c;通常使用實體-聯系…

tooltip.css-2.0文檔

tooltip.css 純CSS鼠標提示工具。 v. 2.0.0 更新日期&#xff1a;2018.4.12 預覽DEMO。 安裝&#xff1a; 只需在頁面中引入"tooltip.css"或“tooltip.min.css”文件即可。 如&#xff1a; <link rel"stylesheet" href"css/tooltip.css"…

Java虛擬機:如何判定哪些對象可回收?

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請注明出處&#xff0c;歡迎交流學習&#xff01; 在堆內存中存放著Java程序中幾乎所有的對象實例&#xff0c;堆內存的容量是有限的&#xff0c;Java虛擬機會對堆內存進行管理&#xff0c;回收已經“死去”的對象&…

html標簽object和embed,html標簽object和embed的區別

object和embed的區別The code in bold above is the actual code that you need to place in your page to embed a FusionCharts chart.In the above code, weveused and tags to embed the 3D Column Chart (Column3D.swf) within the HTML page.used &dataUrlData.xml u…

Apache Apollo REST API

Apache Apollo是新一代&#xff0c;高性能&#xff0c;多協議的消息傳遞代理&#xff0c;它是從頭開始構建的&#xff0c;可以替代ActiveMQ5.x。 我過去曾在博客上發表過文章 &#xff08;第一部分已經與第二部分一起發布了&#xff09;。 Apollo的非阻塞異步體系結構使其速度…

bzoj1588 [HNOI2002]營業額統計

1588: [HNOI2002]營業額統計 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 17931 Solved: 7391[Submit][Status][Discuss]Description 營業額統計 Tiger最近被公司升任為營業部經理&#xff0c;他上任后接受公司交給的第一項任務便是統計并分析公司成立以來的營業情況。 T…

python管道通信_Python進程通信之匿名管道實例講解

匿名管道管道是一個單向通道,有點類似共享內存緩存.管道有兩端,包括輸入端和輸出端.對于一個進程的而言,它只能看到管道一端,即要么是輸入端要么是輸出端.os.pipe()返回2個文件描述符(r, w),表示可讀的和可寫的.示例代碼如下:復制代碼 代碼如下:#!/usr/bin/pythonimport timeim…

css3中的box-sizing屬性的使用

box-sizing屬性用來定義元素的width和height所表示的區域,該屬性一般有三種值&#xff1a;content-box、border-box、inherit。 其中inherit表示box-sizing的值應該從父元素繼承。 content-box和border-box的主要區別就是元素的width和height的值包不包括border、padding這兩…

ES6擴展運算符...進行的數組刪除

今天寫了按照React小書寫了Reducer&#xff0c;發現基礎真是太重要了&#xff0c;所有關于上層建筑的細節都需要回到下層細節中去尋找&#xff0c;而且現在的基礎也由ES3變成了ES6了。 const ADD_USER "ADD_USER" const DELETE_USER "DELETE_USER" const…

中南大學在線考試答案計算機基礎,中南大學《計算機基礎》在線考試題庫(267題)(有答案).doc...

中南大學《計算機基礎》在線考試題庫(267題)(有答案).doc 計算機基礎01 總共89題共100分 一. 單選題 (共35題,共35分) 1. 域名服務器DNS的主要功能是( )。 (1分) A.通過請求及回答獲取主機和網絡相關的信息 B.查詢主機的MAC地址 C.為主機自動命名 D.合理分配IP地址 ★標準答案&…

自動化的OSGi測試運行器

在我的團隊成員中&#xff0c;我以忘記維護&#xff08;JUnit&#xff09;測試套件而聞名。 我只是無法為此付出額外的手動為套件添加測試的步驟。 幸運的是&#xff0c;有連續的集成服務器通過命名模式收集測試。 如果我介紹的一項孤立測試失敗了&#xff0c;那么它會脫穎而出…