poj3667 線段樹區間合併)

2021-06-26 06:58:11 字數 887 閱讀 6329

思路:線段樹的區間合併,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 ...