NOI2004 鬱悶的出納員

2021-07-22 03:16:26 字數 789 閱讀 7746

大致題意就是對初始為空的數列的各種操作233

題解:splay啦~

其中可能會遇到的幾個問題:

#1.如何刪去低於min的點:

找到數列中min的後繼提為根,把根的左孩子丟(shan)了就完成了(很容易yy到的對吧~)

#2.如何處理對當前數列中的數進行±k:

開個全域性變數存整體的波動(?)值ff。那麼刪點的時候就把低於min-ff的刪掉;又是僅對於當前的數,於是後來插入的數要-ff再插入,以此來保證新插入的數不受先前操作的影響。

p.s.輸出的時候記得加上ff哦

#include#include#include#includeusing namespace std;

#define maxn 101000

struct node

tr[maxn*2];int len,root;

int ls,num,zs;//ls-上面說的ff;num-員工人數(算上離開了的?);zs-離開的員工數(就是最後要輸出的那個)

void updata(int x)

void add(int d,int f)

else if (tr[x].d=k) x=rc;

else if (tr[rc].c+tr[x].n=minn)

}else if (c=='a') ls+=x;

else if (c=='s')

else if (c=='f')

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

return 0;

}

noi 2004 鬱悶的出納員

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

NOI2004 鬱悶的出納員

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

NOI 2004 鬱悶的出納員

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