線段樹 講課用 最長連續空位

2022-03-01 18:17:44 字數 1028 閱讀 1303

題意:酒店n個房間,m個操作:入住或退房

如果操作為入住,同一批客人安排的房間號必須連續

操作1:有x個客人要入住,輸出滿足條件的最小的房間編號,若不滿足條件輸出0

操作2:房間為[x,y]的客人要退房

題解:如果你會了第一題(bss),這題就簡單了

題意轉化:詢問最長連續空位位置,帶修改

如果沒有操作2,把每個房間權值看成1,就變成了bss問題,不過輸出的是左端點位置

操作2僅是乙個區間修改罷了

#include#include

#include

using

namespace

std;

#define n 50000

intn,m;

int mx[n<<2|1],lmx[n<<2|1],rmx[n<<2|1

];int f[n<<2|1],siz[n<<2|1

];void read(int &x)

}void build(int k,int l,int

r)void down(int k,int l,int

r) f[l]=f[r]=f[k];

f[k]=-1;}

int query(int k,int l,int r,int

len)

void up(int

k)void change(int k,int l,int r,int opl,int opr,intin)

if(f[k]!=-1

) down(k,l,r);

int mid=l+r>>1

;

if(opl<=mid) change(k<<1,l,mid,opl,opr,in

);

if(opr>mid) change(k<<1|1,mid+1,r,opl,opr,in

); up(k);

}void

init()

}else

}}int

main()

HDU 3308 線段樹。。最長連續上公升子串行

這個被 notonlysuccess 歸類為區間合併 想來區間合併的題 pushup 不但更新的時候會用到,左右兩個孩子得到的結果也要用 pushup 處理,就換了一下pushup的形式。爽 寫著寫著。不知不覺這巨集就變的越來越多了。include include include include i...

線段樹維護連續區間

在抗日戰爭期間,華北平原廣大地區進行了大規模的隧道戰。一般來說,通過隧道連線的村莊排成一列。除了兩端,每個村莊都與兩個相鄰的村莊直接相連。入侵者經常對一些村莊發動襲擊並摧毀其中的部分隧道。八路軍指揮官要求最新的隧道和村莊連線狀態。如果某些村莊嚴重隔離,必須立即恢復連線!input 輸入的第一行包含兩...

線段樹3(離散化,連續區間)

題目是依次按給定的範圍貼海報,問覆蓋到最後還能看到幾張海報。因為給定的貼海報的板子總長度為10 9,陣列開不下。但是考慮到海報只有10 5張,而整個問題其實課忽略板子長度,只需要考慮每張海報之間的覆蓋關係就可以了,也就是說 1,1000008 3,9990 10,20000000 這三個區間的覆蓋情...