思路:線段樹的區間合併,lm表示該區間從左邊開始最大的空區間,mm表示該區間最大的空區間,rm表示從右邊數最大的空區間
注意向下更新
#include#includeusing namespace std;
const int n=50005;
struct node
d[n<<3];
int max(int a,int b)
void pushup(int rt)
void pushdown(int rt)
else
}void build(int rt,int l,int r)
void updata(int rt,int l,int r,int a)
int len=d[rt].r-d[rt].l+1;
if((d[rt].mm==0&&d[rt].lm==0&&d[rt].rm==0)||(d[rt].mm==len&&d[rt].lm==len&&d[rt].rm==len))
pushdown(rt);
int mid=(d[rt].l+d[rt].r)>>1;
if(r<=mid)
updata(rt<<1,l,r,a);
else if(l>mid)
updata(rt<<1|1,l,r,a);
else
pushup(rt);
}int query(int rt,int l)
else if(d[rt].rm>=l)
return d[rt].r-d[rt].rm+1;
return 0;
}int main()
else if(p==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 ...