poj3667 線段樹(區間合併)

2021-06-06 01:53:41 字數 890 閱讀 8795

題意:有編號為1~n的n個房間,有兩種詢問

1.有人來訂連續的k間房,有的話返回第一間房的編號,否則返回0。

2.有人退連續的從a開始的連續的k間房。

1.該區間最大的連續空房數

2.該區間從最左邊起的最大的連續空房數

3.該區間從最右邊起的最大的連續空房數

根據以上三個資訊,每個非葉結點的資訊都可以由它的左右兒子更新得到了。

#include #include #include #include using namespace std;

#define maxn 50005

int total[maxn<<2], col[maxn<<2], lsum[maxn<<2], rsum[maxn<<2];

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

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

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

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

if (col[rt]) pushdown(l, r, rt);

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

if (m >= l) update(l, r, c, l, m, rt<<1);

if (m < r) update(l, r, c, m+1, r, rt<<1|1);

pushup(l, r, rt);

}int query(int l, int r, int rt, int c)

int main()

else

}return 0;

}

poj 3667 線段樹 區間合併

感想 沒有什麼說的了。越做線段樹越感覺自己水。這個我感覺自己就真坑了大家了。難的不會,簡單的也水不過了。哎,最近這是什麼情況啊!題目 題意 旅館有編號為1 n的房間,現在可能有m波人過了租房,每波人可能要定連續的d間房,如果有的話,編號盡量小,沒有的話就說0,也可能有d個人要退房,他們的房是連續的x...

線段樹區間合併poj3667

題意 1 a表示如果有長度為a的連續的空房間,則占用 2 a b表示清空 a,a b 1 的房間 思路 線段樹區間維護,除了考慮區間上最大空房間,還要維護左邊最大連續和右邊最大連續 include include include include using namespace std define ...

poj3667 線段樹區間合併)

思路 線段樹的區間合併,lm表示該區間從左邊開始最大的空區間,mm表示該區間最大的空區間,rm表示從右邊數最大的空區間 注意向下更新 include includeusing namespace std const int n 50005 struct node d n 3 int max int ...