poj 3667 線段樹區間合併

2021-07-03 20:46:28 字數 1261 閱讀 4230

題意:

n個房間,有如下兩種操作:

1 d:有d個人要入住,並且入住的要是連續的房間;列印輸出連續房間的第乙個房間,若住不進去,輸出0;

2 x d:從x開始有d個人退房。

解析:區間合併的模板往上套了。

具體細節還是想不明白,先放著吧。

來自:**:

#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long

#define lson lo, mi, rt << 1

#define rson mi + 1, hi, rt << 1 | 1

using namespace std;

const int maxn = 50000 + 10;

const int inf = 0x3f3f3f3f;

const double eps = 1e-8;

const double pi = acos(-1.0);

const double ee = exp(1.0);

///sum儲存的是還有多少房間可住

int sum[maxn << 2];

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

///-1 無延遲 1 住進 0 搬出

int cover[maxn << 2];

void pushup(int rt, int d)

void pushdown(int rt, int d)

}void build(int lo, int hi, int rt)

void update(int l, int h, int num, int lo, int hi, int rt)

pushdown(rt, hi - lo + 1);

int mi = (lo + hi) >> 1;

if (l <= mi)

update(l, h, num, lson);

if (mi < h)

update(l, h, num, rson);

pushup(rt, hi - lo + 1);

}int query(int w, int lo, int hi, int rt)

int main()

}if (op == 2)}}

return 0;

}

poj3667 線段樹(區間合併)

題意 有編號為1 n的n個房間,有兩種詢問 1.有人來訂連續的k間房,有的話返回第一間房的編號,否則返回0。2.有人退連續的從a開始的連續的k間房。1.該區間最大的連續空房數 2.該區間從最左邊起的最大的連續空房數 3.該區間從最右邊起的最大的連續空房數 根據以上三個資訊,每個非葉結點的資訊都可以由...

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 ...