oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的
工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好
,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量。我
真不知道除了調工資他還做什麼其它事情。工資的頻繁調整很讓員工反感,尤其是集體扣除工資的時候,一旦某位
員工發現自己的工資已經低於了合同規定的工資下界,他就會立刻氣憤地離開公司,並且再也不會回來了。每位員
工的工資下界都是統一規定的。每當乙個人離開公司,我就要從電腦中把他的工資檔案刪去,同樣,每當公司招聘
了一位新員工,我就得為他新建乙個工資檔案。老闆經常到我這邊來詢問工資情況,他並不問具體某位員工的工資
情況,而是問現在工資第k多的員工拿多少工資。每當這時,我就不得不對數萬個員工進行一次漫長的排序,然後
告訴他答案。好了,現在你已經對我的工作了解不少了。正如你猜的那樣,我想請你編乙個工資統計程式。怎麼樣
,不是很困難吧?
第一行有兩個非負整數n和min。n表示下面有多少條命令,min表示工資下界。
接下來的n行,每行表示一條命令。命令可以是以下四種之一:
如果某員工的初始工資低於工資下界,他將立刻離開公司。
_(下劃線)表示乙個空格,i命令、a命令、s命令中的k是乙個非負整數,f命令中的k是乙個正整數。
在初始時,可以認為公司裡乙個員工也沒有。
i命令的條數不超過100000
a命令和s命令的總條數不超過100
f命令的條數不超過100000
每次工資調整的調整量不超過1000
新員工的工資不超過100000
輸出行數為f命令的條數加一。
對於每條f命令,你的程式要輸出一行,僅包含乙個整數,為當前工資第k多的員工所拿的工資數,
如果k大於目前員工的數目,則輸出-1。
輸出檔案的最後一行包含乙個整數,為離開公司的員工的總數。
9 10
i 60
i 70
s 50
f 2i 30
s 15
a 5f 1
f 210
20-1
2直接用treap來維護第k大公司。
每來乙個員工如果給的工資大於期望,那麼就扔進treap裡面。
加工資直接迴圈,減工資時,如果當期那點小於期望,就刪了。
注意幾個細節:
刪點重複的直接一起刪。
一定要先刪點,然後再減工資,要不然刪一半時二叉搜尋樹性質無法保證。
#include #include#include
#include
#include
#include
#define in(a) a=read()
#define maxn 200010
#define rep(i,k,n) for(int i=k;i<=n;i++)
using
namespace
std;
inline
intread()
struct
nodetree[maxn];
intn,m,total,root,fair[maxn],ans;
int dis=0
;inline
void update(int
i)inline
intran()
inline
void zag(int &i)
inline
void zig(int &i)
inline
void insert(int &i,int
k) tree[i].size++;
if(tree[i].data==k) tree[i].c++;
else
if(kelse
return;}
inline
void delate(int &i,int
k)
else
if(tree[k].datatree[k].c,delate(tree[i].l,k);
else tree[i].size-=tree[k].c,delate(tree[i].r,k);
return;}
inline
int getnum(int i,int
k) k-=tree[i].c;
return
getnum(tree[i].l,k);
}int
main()
if(c=='a'
) rep(i,
1,total) if(!fair[i]) tree[i].data+=a;
if(c=='s'
) }
rep(i,
1,total)
if(!fair[i]) tree[i].data-=a;
}if(c=='f')
}cout
return0;
}
bzoj1503 鬱悶的出納員
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的 工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好 就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的...
BZOJ1503 鬱悶的出納員
出納員是乙個優秀的職業。根據題意要構造一種資料結構使得能動態維護乙個權值大於等於min的集合,並且支援查詢排名等操作,資料範圍來看複雜度是nlogn 由以上得出結論使用平衡樹 我用的是treap,如果刪的話就要把整顆左子樹和根節點一起刪再處理右子樹的,其他操作和普通平衡樹一樣,可以看我之前那個模板。...
鬱悶的出納員(bzoj 1503)
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量...