HDU 4553 約會安排

2021-08-21 00:18:07 字數 1291 閱讀 3592

雙線段樹+區間合併

sum儲存最大區間長度,lsum儲存鄰接左邊界最大區間長度,rsum則是右邊界

合併時可以通過這些計算出父節點的值

對於屌絲的邀請和女神的邀請可以安排兩個線段樹來查詢時間

詳見**

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=100000+10; //陣列大小

int dsum[maxn<<2],dlsum[maxn<<2],drsum[maxn<<2]; //屌絲樹

int nsum[maxn<<2],nlsum[maxn<<2],nrsum[maxn<<2]; //女神樹

int lazy[maxn<<2];

void pushup(int rt,int l,int r)

void pushdown(int rt,int l,int r)

else

else

}lazy[rt]=0;

}}void build(int l,int r,int rt)

int m=(l+r)>>1;

build(l,m,rt<<1);

build(m+1,r,rt<<1|1);

pushup(rt,l,r);

}void update(int l,int r,int f,int l,int r,int rt)

else

lazy[rt]=f;

return;

}if(l==r) return;

pushdown(rt,l,r);

int m=(l+r)>>1;

if(l<=m) update(l,r,f,l,m,rt<<1);

if(r>m) update(l,r,f,m+1,r,rt<<1|1);

pushup(rt,l,r);

}int query_d(int len,int l,int r,int rt)

int query_n(int len,int l,int r,int rt)

int main()

else printf("fly with yourself\n");

}else if(s[0]=='n')

else if(nsum[1]>=a)

else printf("wait for me\n");

}else}}

return 0;

}

HDU 4553 約會安排 線段樹

題意 有個屌絲有t的空閒時間。每次有人與他約t的時間,他都會找到最靠前的一段符合要求的時間,稱為 最先適應演算法 1,如果 約他,他就會按 最先適應演算法 去找,找到就約否則不約。2,如果女神約他,他也會先按原先的方法去找,如果找不到,那他會忽略所有與 的約定而通過原來的方法去找跟女神約會的時間,找...

hdu4553約會安排 線段樹

ds qt 找一段最靠前的長度為qt的空間 ns qt 找一段最靠前的長度為qt的空間,如果沒找到可以將ds佔據的空間當做空閒空間,找一段最靠前的空間 study l r 清空l r的空間 用兩個線段樹,乙個處理ds的情況,乙個處理ns的情況 線段樹維護,ma l ma r ma 區間 l,r 的左...

hdu4553約會安排 線段樹

ds qt 找一段最靠前的長度為qt的空間 ns qt 找一段最靠前的長度為qt的空間。假設沒找到能夠將ds占領的空間當做空暇空間,找一段最靠前的空間 study l r 清空l r的空間 用兩個線段樹,乙個處理ds的情況。乙個處理ns的情況 線段樹維護,ma l ma r ma 區間 l,r 的左...