NOI2004 鬱悶的出納員

2022-04-09 11:31:22 字數 836 閱讀 2895

一道平衡樹的題。

當時用pb_ds胡搞過了,但發現我的資料結構好魚.。

2018.7.9修改:比資料結構更魚的是dp

線段樹可以搞,就是維護乙個桶,然後支援單點新增,區間賦值,記乙個detla,記錄工資的加減。為防止工資出現負數,做桶時候re,加乙個100001,query後減去。

orz:

(#define czq a+k)

#include #define czq a+k

const int a=10005,n=300001;

int n,min,detla,ans;

char opt[10];

struct seg t[n<<2];

void pushup(int cur)

void modify(int cur,int l,int r,int l,int r,int x,bool f)

pushup(cur);

int mid=l+r>>1;

if(r<=mid) modify(cur<<1,l,mid,l,r,x,f);

else if(mid>1;

if(t[cur<<1|1].sum>=kth) return query(cur<<1|1,mid+1,r,kth);

return query(cur<<1,l,mid,kth-t[cur<<1|1].sum);

}int main() else if(opt[0]=='a') detla+=k;

else if(opt[0]=='s') else

} printf("%d",ans-t[1].sum);

}

noi 2004 鬱悶的出納員

原題位址 花了一兩天真正的熟悉了treap,對於乙個東西,本蒟蒻認為,不應該要會,還應會熟練的寫,像哈狗寫這個只需十分鐘 好吧,話歸正題 先推薦另類解法 戳進去 此題解法很多bit 權值線段樹 各種平衡樹 準備抽空寫 是一道很棒的模板題。這道題我們把每次全體加的工資和減的弄到乙個變數,姑且叫為w,把...

NOI2004 鬱悶的出納員

大致題意就是對初始為空的數列的各種操作233 題解 splay啦 其中可能會遇到的幾個問題 1.如何刪去低於min的點 找到數列中min的後繼提為根,把根的左孩子丟 shan 了就完成了 很容易yy到的對吧 2.如何處理對當前數列中的數進行 k 開個全域性變數存整體的波動 值ff。那麼刪點的時候就把...

NOI2004 鬱悶的出納員

點此看題 這道題很新的一點就是加工資和減工資,這貌似要用到區間修改。但是細細想想,操作的物件是全樹,我們可以維護乙個累積的修改值,新加入乙個點的話要刪去之前的累計的修改值,對於減工資的情況,判斷有沒有低於最低的限制。注意如果乙個一來人就低於最低線,那麼這個人不被統計在最後的刪除人數中。include...