自從某次考試寫線段樹寫掛了以後 這是第一次寫線段樹,,,,,,
這是乙個傷心的故事……
題意:
思路:
標記 維護從左到右的最大值 從右到左的最大值 區間內的最大值……
然後就一搞 就出來了
//by siriusren
#include
using namespace std;
int n,m,jy,xx,yy,d,d;
struct treetree[222222];
inline int max(int
x,int
y)inline int
read()
void build(int l,int r,int
pos)
int mid=(l+r)>>1,lson=pos
<<1,rson=pos
<<1|1;
build(l,mid,lson),build(mid+1,r,rson);
tree[pos].lsum=tree[pos].rsum=tree[pos].sum=tree[lson].sum+tree[rson].sum;
}void push_down(int num,int
pos)
else
tree[pos].cover=0;
}void push_up(int num,int
pos)
int query(int l,int r,int
pos)
return0;}
void insert(int l,int r,int
pos,int id)
int mid=(l+r)>>1,lson=pos
<<1,rson=pos
<<1|1,len=r-l+1;
if(tree[pos].cover)push_down(len,pos);
if(mid1,r,rson,id);
else
if(mid>=yy)insert(l,mid,lson,id);
else insert(l,mid,lson,id),insert(mid+1,r,rson,id);
push_up(len,pos);
}int main()
else}}
線段樹重開poj 3667
本題目重做感受頗多,思考的深度決定了對線段樹的掌握程度,只有自己創生的才是自己的啊。本題用到了三個維護值,sum表示區間最長連續區間,lsum為區間左面最長連續區間長。rsum同理。現在來說明sum為什麼具有 可維護性,線段樹的可維護性是相對於更新區間而言的,因為更新的logn個區間總是被刷成全空房...
poj3667 線段樹(區間合併)
題意 有編號為1 n的n個房間,有兩種詢問 1.有人來訂連續的k間房,有的話返回第一間房的編號,否則返回0。2.有人退連續的從a開始的連續的k間房。1.該區間最大的連續空房數 2.該區間從最左邊起的最大的連續空房數 3.該區間從最右邊起的最大的連續空房數 根據以上三個資訊,每個非葉結點的資訊都可以由...
poj 3667 線段樹 區間合併
感想 沒有什麼說的了。越做線段樹越感覺自己水。這個我感覺自己就真坑了大家了。難的不會,簡單的也水不過了。哎,最近這是什麼情況啊!題目 題意 旅館有編號為1 n的房間,現在可能有m波人過了租房,每波人可能要定連續的d間房,如果有的話,編號盡量小,沒有的話就說0,也可能有d個人要退房,他們的房是連續的x...