題意:
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 ...