NOI2004 鬱悶的出納員 平衡樹

2021-06-28 17:40:30 字數 1370 閱讀 3603

ps:splay依然不能一次寫對…… 總會寫出毛病,真是醉醉醉醉醉……

這題難點在於變動工資,我們只需要變動工資k,表示工資現在增加了k。 然後如果有員工進來,【並且進的來,初始工資比最低工資高】,那麼我們就把這個員工的工資,減去k這個值,加入到平衡樹中。

刪人的的時候,只要查比【初始工資+工資變化量k】小的數字全刪掉。 這裡不需要乙個乙個刪,大多數平衡樹都會支援刪整棵樹的操作的~ 就直接把比那個值小的整棵樹都刪掉即可。

#include #include #include using namespace std;

const int maxint = 0x7fffffff;

struct node

node(int key_, node *c0, node *c1)

node* rz()

}tnull, *null = &tnull;

struct splay

inline void zig(int d)

inline void zigzig(int d)

inline void finish(int d)

root -> c[!d] = p;

} inline void select(int k)

if (dd) k-= t+1;

d != dd ? zig(d), zig(dd) : zigzig(d);

} finish(0), finish(1);

root -> rz();

} inline void search(int x)

d != dd? zig(d), zig(dd) : zigzig(d);

} finish(0), finish(1);

root -> rz();

if (x > root -> key) select(root -> c[0] -> size + 1);

} inline void ins(int x)

inline void del(int x)

int sel(int k)

int ran(int x)

}sp;

int limit, n;

int main()

sp.ins(tmp + biandong);

} if (flag == 'a') biandong -= tmp;

if (flag == 's')

if (flag == 'f')

printf("%d\n", sp.sel(sp.root -> size - tmp) + limit - biandong);

} }printf("%d\n", away);

return 0;

}

NOI 2004 鬱悶的出納員(平衡樹)

題目描述 oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙...

noi 2004 鬱悶的出納員

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

NOI2004 鬱悶的出納員

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