Codevs 1286 鬱悶的出納員

2021-07-30 21:46:11 字數 2574 閱讀 1010

1286 鬱悶的出納員 2023年noi全國競賽

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 大師 master

題解 檢視執行結果

題目描述 description

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

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

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

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

輸入描述 input description

第一行有兩個非負整數n和min。n表示下面有多少條命令,min表示工資下界。

接下來的n行,每行表示一條命令。命令可以是以下四種之一:

名稱格式

作用i命令

i_k新建乙個工資檔案,初始工資為k。如果某員工的初始工資低於工資下界,他將立刻離開公司。

a命令a_k

把每位員工的工資加上k

s命令s_k

把每位員工的工資扣除k

f命令f_k

查詢第k多的工資

_(下劃線)表示乙個空格,i命令、a命令、s命令中的k是乙個非負整數,f命令中的k是乙個正整數。

在初始時,可以認為公司裡乙個員工也沒有。

輸出描述 output description

輸出檔案的行數為f命令的條數加一。

對於每條f命令,你的程式要輸出一行,僅包含乙個整數,為當前工資第k多的員工所拿的工資數,如果k大於目前員工的數目,則輸出-1。

輸出檔案的最後一行包含乙個整數,為離開公司的員工的總數。

樣例輸入 sample input

9 10

i 60

i 70

s 50

f 2i 30

s 15

a 5f 1

f 2樣例輸出 sample output

10-1

資料範圍及提示 data size & hint

【約定】

l i命令的條數不超過100000

l a命令和s命令的總條數不超過100

l f命令的條數不超過100000

l 每次工資調整的調整量不超過1000

l 新員工的工資不超過100000

#include#include#include#include#includeusing namespace std;

struct sbttre[200010];

int sum,n,minn,now,key,top,root;

string ch;

void left_rot(int &x )

void right_rot(int &x)

void maintain(int &x,bool flag)

}else

}maintain(tre[x].left,0); maintain(tre[x].right,1);

maintain(x,1); maintain(x,0);

}void insert(int &x,int data)

else

}int remove(int &x,int data)

else

if(tre[x].left==0&&tre[x].right!=0)

else

if(tre[x].left==0&&tre[x].right==0)

else

if(tre[x].left!=0&&tre[x].right!=0)

}}int

select(int &x,int k)

int getmin()

int main()

}if(ch=="i")

else

if (ch=="a")

for(int j=1;j<=top;j++)

tre[j].data+=key;

else

if (ch=="s")

for(int j=1;j<=top;j++)

tre[j].data-=key;

else

if(ch=="f")

else

printf("%d\n",select(root,now-key+1));}}

cout<0;

}

感覺自己好久沒來寫**了,鍵盤都陌生了,數學、揹包……耽誤好多時間、、、怎麼辦吶!!!

AC日記 鬱悶的出納員 codevs 1286

鬱悶的出納員 思路 設工資下限為ko,然後ko 因為要小於工資下限 設cur為記錄工資增長,降低 設第i個人的工資為pos 對應的四種操作 插入 cur pos ko 增長 cur pos 降低 cur pos 每個降低操作都要進行一次刪除節點 把小於等於cur的節點全部刪掉 排名 輸出rank c...

鬱悶的出納員

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

鬱悶的出納員 題解(Splay)

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