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。那麼刪點的時候就把...