鬱悶的出納員

2022-05-09 13:00:49 字數 1562 閱讀 9411

這題坑死我了。。。

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

工資的頻繁調整很讓員工反感,尤其是集體扣除工資的時候,一旦某位員工發現自己的工資已經低於了合同規定的工資下界,他就會立刻氣憤地離開公司,並且再也不會回來了。每位員工的工資下界都是統一規定的。每當乙個人離開公司,我就要從電腦中把他的工資檔案刪去,同樣,每當公司招聘了一位新員工,我就得為他新建乙個工資檔案。

老闆經常到我這邊來詢問工資情況,他並不問具體某位員工的工資情況,而是問現在工資第k多的員工拿多少工資。每當這時,我就不得不對數萬個員工進行一次漫長的排序,然後告訴他答案。

好了,現在你已經對我的工作了解不少了。正如你猜的那樣,我想請你編乙個工資統計程式。怎麼樣,不是很困難吧?

如果某個員工的初始工資低於最低工資標準,那麼將不計入最後的答案內

最後一句話的意思是工資不夠直接退

#include#include

#include

#include

using

namespace

std;

#define n 100050

intn,m,rt,tot;

char ch[2

];struct

treap

tr[n];

void update(int

u)void lturn(int &x)

void rturn(int &x)

void insert(int &k,int

x) tr[k].siz++;

if(tr[k].vl==x)

else

if(x>tr[k].vl)

else

}int

cnt;

void deal(int &k)//特殊操作,非普通刪除

cnt+=(tr[tr[k].ls].siz+tr[k].w);//先刪左子樹和當前點

k =tr[k].rs;//將其父親的兒子k改為k的右兒子

deal(k);

update(k);

}int query(int u,int

k)int

main()

else

if(ch[0]=='a'

)//這裡的a和s是反向操作

else

if(ch[0]=='s'

)

else

if(ch[0]=='f'

)

printf(

"%d\n

",query(rt,x)+(m0-m));}}

printf(

"%d\n

",cnt);

return0;

}

鬱悶的出納員 題解(Splay)

題面 用delta記錄對工資的加減,那麼新增節點時點權應 delta,輸出時 delta 幾種操作中減少工資較麻煩 1.delta val 2.刪點 求前驅轉到根,刪除左子樹 這裡的刪除不用乙個乙個暴力刪,直接斷掉子樹關係即可 至於求k大 我比較懶直接改成求size k 1小 逃 include i...

SBT模板 鬱悶的出納員 By Kuangbin

拿來當模板,bin哥別生氣哈 人一我百,人十我萬!追逐青春的夢想,懷著自信的心,永不放棄 by kuangbin 鬱悶的出納員 time limit 5000msmemory limit 65536kb64bit io format lld llu submit status system craw...

noi 2004 鬱悶的出納員

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