題意:酒店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 這三個區間的覆蓋情...