線段樹專輯——pku 3667 Hotel

http://poj.org/problem?id=3667

哈哈,經典中的經典題啊。利用線段樹求最大連續空閑區間,并返回空閑區間的起點坐標。

View Code
  1 #include<iostream>
2 #include<string>
3 #include<algorithm>
4 using namespace std;
5
6 struct node
7 {
8 int l;
9 int r;
10 int l_val; //從左節點數起的最大連續空閑區間
11 int r_val; //從右節點起的最大連續空閑區間
12 int max_val; //整個區間的最大連續空閑區間
13 int cover; //當前區間的占用情況,1表示占用,0表示不占用,-1表示既有占用又有不占用
14 };
15
16 node tree[250000];
17 int n,m;
18
19 int max(int a,int b)
20 {
21 return a>b?a:b;
22 }
23
24 void build(int i,int l,int r)
25 {
26 tree[i].l=l;
27 tree[i].r=r;
28 tree[i].cover=0;
29 tree[i].l_val=tree[i].r_val=tree[i].max_val=r-l+1; //開始所有區間都未使用
30 if(l==r)
31 return;
32 int mid=(l+r)/2;
33 build(2*i,l,mid);
34 build(2*i+1,mid+1,r);
35 }
36
37 void fun(int i) //跟新區間
38 {
39 if(tree[i].cover==0)
40 {
41 tree[i].l_val=tree[i].r_val=tree[i].max_val=tree[i].r-tree[i].l+1;
42 }
43 else if(tree[i].cover==1)
44 {
45 tree[i].l_val=tree[i].r_val=tree[i].max_val=0;
46 }
47 }
48
49 void updata(int i,int l,int r,int w)
50 {
51 if(tree[i].l>r || tree[i].r<l)
52 return;
53 if(tree[i].l>=l && tree[i].r<=r)
54 {
55 tree[i].cover=w; //跟新該段情況
56 fun(i); //并根據cover跟新其他域
57 return;
58 }
59 if(tree[i].cover!=-1)
60 {
61 tree[2*i].cover=tree[2*i+1].cover=tree[i].cover;
62 fun(2*i); fun(2*i+1);
63 tree[i].cover=-1;
64 }
65 updata(2*i,l,r,w);
66 updata(2*i+1,l,r,w);
67 if(tree[2*i].cover==tree[2*i+1].cover) //由下而上跟新所有信息
68 tree[i].cover=tree[2*i].cover;
69 else
70 tree[i].cover=-1;
71 tree[i].l_val=tree[2*i].l_val+(tree[2*i].cover==0 ? tree[2*i+1].l_val:0);
72 tree[i].r_val=tree[2*i+1].r_val+(tree[2*i+1].cover==0 ? tree[2*i].r_val:0);
73 tree[i].max_val=max(max(tree[2*i].max_val,tree[2*i+1].max_val),(tree[2*i].r_val+tree[2*i+1].l_val));
74 }
75
76 int find(int i,int w)
77 {
78 if(tree[i].cover==0 && tree[i].l_val>=w) //從左邊起能找到
79 {
80 return tree[i].l;
81 }
82 if(tree[i].cover==1)
83 {
84 return 0;
85 }
86 if(tree[i].cover==-1 && tree[i].max_val>=w)
87 {
88 if(tree[2*i].max_val>=w) //左邊還有足夠空間,向左遞歸
89 return find(2*i,w);
90 else if(tree[2*i].r_val+tree[2*i+1].l_val>=w) //如果中間有足夠空間,直接計算
91 {
92 return tree[2*i].r-tree[2*i].r_val+1;
93 }
94 else
95 return find(2*i+1,w); //向右遞歸
96 }
97 return 0;
98 }
99
100 int main()
101 {
102 freopen("D:\\in.txt","r",stdin);
103 int i,a,b,c;
104 while(scanf("%d%d",&n,&m)!=EOF)
105 {
106 build(1,1,n);
107 for(i=0;i<m;i++)
108 {
109 scanf("%d",&c);
110 if(c==1)
111 {
112 scanf("%d",&a);
113 b=find(1,a);
114 printf("%d\n",b);
115 if(b)
116 {
117 updata(1,b,b+a-1,1);
118 }
119 }
120 else
121 {
122 scanf("%d%d",&a,&b);
123 updata(1,a,a+b-1,0);
124 }
125 }
126 }
127 return 0;
128 }

?

?

轉載于:https://www.cnblogs.com/ka200812/archive/2011/11/10/2244966.html

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

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

相關文章

houseparty不流暢_重新設計Houseparty –用戶體驗案例研究

houseparty不流暢Houseparty has become very popular during the COVID-19 period because it helps you connect with others in a fun way. The concept is simple, you open the app and jump on a video call with your friends. You can even play online games with the…

你不知道的 Node.js 工具函數

從類型判斷說起在 JavaScript 中&#xff0c;進行變量的類型校驗是一個非常令人頭疼的事&#xff0c;如果只是簡單的使用 typeof 會到各種各樣的問題。舉幾個簡單的&#x1f330;&#xff1a;console.log(typeof null) // object console.log(typeof new Array) // object cons…

Java應用集群下的定時任務處理方案(mysql)

今天來說一個Java多機部署下定時任務的處理方案。 需求: 有兩臺服務器同時部署了同一套代碼&#xff0c; 代碼中寫有spring自帶的定時任務&#xff0c;但是每次執行定時任務時只需要一臺機器去執行。 當拿到這個需求時我腦子中立馬出現了兩個簡單的解決方案&#xff1a; 利用ip…

概念驗證_設置成功的UX概念驗證

概念驗證用戶體驗/概念證明/第1部分 (USER EXPERIENCE / PROOF OF CONCEPT / PART 1) This is the first article of a four-part series. Please read Part 2 and Part 3.這是由四個部分組成的系列文章的第一篇。 請閱讀 第2 部分 和 第3部分 。 How do today’s top UX desi…

從 vue3 和 vite 源碼中,我學到了一行代碼統一規范團隊包管理器的神器

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。已進行四個月了&#xff0c;很多小伙伴表示收獲頗豐。想學源碼&#xff0c;極力推薦之前我寫…

什么事接口

假設你設計一個和人交流的程序。 先建立一個接口 interface 人 //定義接口&#xff0c;它代表一個人&#xff0c; {void Hello(); }//接口虛函數&#xff0c;用來跟這個人說話 但不同的人有不用的交流方式&#xff0c;具體方式用類來實現&#xff0c;比如。 class 美國人&#…

6個高效辦公的Excel小技巧,學會讓你高效辦公

很多人在做Excel表格的時候&#xff0c;會出現下面這種情況&#xff1a;好不容易把內容都輸入好了&#xff0c;才發現文字或是數字的排列組合需要重新調整&#xff0c;這個時候頭就大了&#xff0c;到底是要一個個復制黏貼&#xff0c;還是要刪除后再添加&#xff1f;不管哪種方…

unity 完美像素_像素完美

unity 完美像素從Kidpix到設計系統 (From Kidpix to design systems) Did you ever create stamps in KidPix? Kidpix is bitmap drawing software that’s been around since the nineties, and I remember many happy — more like maddening — hours creating tiny pixela…

整整4個月了,盡全力組織了源碼共讀活動~

大家好&#xff0c;我是若川。從8月份到現在11月結束了。每周一期&#xff0c;一起讀200行左右的源碼&#xff0c;撰寫輔助文章&#xff0c;截止到現在整整4個月了。由寫有《學習源碼整體架構系列》20余篇的若川【若川視野公眾號號主】傾力組織&#xff0c;召集了各大廠對于源碼…

kvm 學習(二)

Linux下 如何通過命令行使用現有的鏡像創建、啟動kvm虛擬機 這里假定已經創建好了相應的鏡像&#xff1a; eg&#xff1a;我這里制作的鏡像名稱為zu1-centos7.img # lszu1-centos7.img 1、拷貝這個鏡像到某一個目錄 cp zu1-centos7.img /data2/ 2、編寫鏡像的配置文件&#x…

字節內部前端開發手冊(完整版)開放下載!

備戰2022&#xff0c;準備好了嗎&#xff1f;據字節HR部門發布的最新信息&#xff0c;2019年以來字節連續3年擴招&#xff0c;而即將到來的2022年春招前端崗位數不低于3000&#xff0c;雖連年擴招&#xff0c;但是報錄比卻從2019年的3%下降到今年的1%。BAT等一線大廠同樣有類似…

EBS中Java并發程序筆記(1)

在Oracle EBS中的Java并發程序&#xff08;Java Concurrent Program&#xff09;是系統功能中的一個亮點&#xff0c;它的出現使得用戶可以在ERP系統中運行自己定義的Java程序。本文為學習筆記&#xff0c;所以不會介紹太多背景知識。 使用Java并發程序的好處&#xff1a; 當遇…

figma設計_5位來自雜亂無章的設計師的Figma技巧

figma設計When starting a design project, a fast pace and multiple design iterations can easily lead to a cluttered mess. Taking the time in the beginning to build good organizational habits will save you time later. You’ll thank your past self when you do…

hello,你知道獲取元素有哪幾種方式嗎?

收下我的小心心&#xff01;&#xff08;害羞臉&#xff09; 根據id屬性的值獲取元素&#xff0c;返回來的是一個元素對象 document.getElementById("id屬性的值") 根據標簽名獲取元素&#xff0c;返回來的是一個偽數組&#xff0c;里面保存了多個的DOM對象 documen…

設計和實現一個 Chrome 插件提升登錄效率

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以點此加我微信ruochuan12 進群參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。已進行4個月了&#xff0c;很多小伙伴表示收獲頗豐。前言在我們的工作過程中&#xff0c;每當…

[待總結]redmine

先列出來&#xff0c;有空再總結轉載于:https://www.cnblogs.com/gracexiao/archive/2011/11/18/2253834.html

qq空間網頁設計_網頁設計中的負空間

qq空間網頁設計重點 (Top highlight)Because screens are limited, web design is also limited. It can be said that in the small box of the screen, each pixel is a piece of real estate.由于屏幕有限&#xff0c;因此網頁設計也受到限制。 可以說&#xff0c;在屏幕的小…

前端組件化-抽象公共組件類

優化上次的組件化小demo 上次的組件化demo只是為了簡單的實現前端組件化的思想&#xff0c;這次我們稍微優化一下抽離公共類 下面代碼 html <div id"wrapper"></div> 復制代碼js /* DOM字符串轉DOM節點 */ const createStringToDom str > {const ele…

時隔一年半,我,一個卑微的前端菜雞,又來寫面經了

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以點此加我微信ruochuan12 進群參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。已進行4個月了&#xff0c;很多小伙伴表示收獲頗豐。作者&#xff1a;刮涂層_贏大獎原文地址…

javascript模版引擎-tmpl的bug修復與性能優化

http://www.planeart.cn/?p1594 http://ejohn.org/blog/javascript-micro-templating http://bbs.phpchina.com/thread-224712-1-1.html [ Noevil: 下面直接貼出改進好的MicroTemp&#xff0c;但是還是建議看一下原文&#xff0c;里面有詳細的改進細節&#xff0c;和改進前后的…