poj 3667 Hotel(區間合併)

2021-07-06 01:11:01 字數 933 閱讀 2719

題目鏈結; poj 3667 hotel

#include#include#define maxn 55555

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

using namespace std;

int col[maxn<<2];//延遲標記,值為1時表示住人,0表示走人,-1表示此區間沒有訪問過,不用向下更新

int lsum[maxn<<2],rsum[maxn<<2],msum[maxn<<2];//lsum表示區間從最左邊開始到右邊的連續空位,rsum為區間從最右邊開始到左邊的連續空位,msum表示此區間最大的連續空間

void pushdown(int rt,int m)

}void pushup(int rt, int m)

void build(int l,int r,int rt)

int query(int p,int l,int r,int rt)

void update(int l,int r,int c,int l,int r,int rt)

pushdown(rt,r-l+1);

int m=(l+r)>>1;

if(l<=m) update(l,r,c,lson);//往左半部分找

if(r>m) update(l,r,c,rson);//往右半部分找

pushup(rt,r-l+1);

}int main()

{ int n,m;

while(~scanf("%d%d",&n,&m))

{build(1,n,1);

int op,a,b;

while(m--)

{scanf("%d",&op);

if(op==1)

{scanf("%d",&a);

if(msum[1]

poj 3667 Hotel 區間合併

思路 昨天開始學習線段樹的區間合併問題,看這個題時,沒一點思路,網上搜各種部落格,發現大部分都是貼 思路說的很少,以至於我昨天下午到晚上還沒把題和線段樹聯絡起來,弱爆了 今天lky給發了個好點的講解部落格,終於看懂了,寫 時,乙個低階錯誤折磨了我一天,找了一天的錯 唉,各種弱 詳細說下這題過程吧。一...

POJ 3667 Hotel 線段樹區間合併

這道題應該算是比較經典的線段樹了 題意是 這座巨型賓館在一條超長走廊上有n 1 n 50000 個排成一排的房間,每個房間都能欣賞到蘇必利爾湖的好景色。現在所有的房間都是空的。現在bessie等旅客們正在不斷地發出訂房和退房要求。你需要接受m 1 m 50000 條指令 每條指令的第乙個數字為1或2...

poj3667 Hotel 線段樹 區間合併

題意 有乙個旅館初始有n個空位置,操作一找連續空位置長度為l的最左端,如果不存在輸0。操作二從 a,a b 1 區間的位置重新 置為空。思路 線段樹區間合併。線段樹維護四個資訊 1 區間連續為空地最長長度 2 從區間左端連續空地最長長度 3 從區間右端向左 連續空的最長長度 4 區間的懶惰標記 pu...