題目
第一行有兩個非負整數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是乙個正整數。 在初始時,可以認為公司裡乙個員工也沒有。
輸出檔案的行數為f命令的條數加一。 對於每條f命令,你的程式要輸出一行,僅包含乙個整數,為當前工資第k多的員工所拿的工資數,如果k大於目前員工的數目,則輸出-1。 輸出檔案的最後一行包含乙個整數,為離開公司的員工的總數。
9 10
i 60
i 70
s 50
f 2i 30
s 15
a 5f 1
f 2
10
20-1
2
i命令的條數不超過100000 a命令和s命令的總條數不超過100 f命令的條數不超過100000 每次工資調整的調整量不超過1000 新員工的工資不超過100000
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n=
1e5+
100+5;
int ch[n][2
],f[n]
,sz[n]
,cnt[n]
,val[n]
;int tot,root;
inline
void
_clear
(int x)
inline
void
update
(int x)
inline
void
route
(int x)
inline
void
splay
(int x)
inline
void
_insert
(int x)
int now=root,fa=0;
while(1
) fa=now,now=ch[now]
[x>val[now]];
if(!now)}}
inline
int_rank
(int x)}}
inline
void
_delete
(int x)if(
!ch[root][0
]&&!ch[root][1
])int tmp=root,ls=ch[root][0
],rs=ch[root][1
];if(
!ls)if(
!rs)
}char s[3]
;int
main()
if(s[0]
=='a'
) tag+
=k;if
(s[0]==
's')
if(s[0]
=='f')}
printf
("%d\n"
,num)
;}
bzoj1503 鬱悶的出納員
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的 工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好 就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的...
BZOJ1503 鬱悶的出納員
出納員是乙個優秀的職業。根據題意要構造一種資料結構使得能動態維護乙個權值大於等於min的集合,並且支援查詢排名等操作,資料範圍來看複雜度是nlogn 由以上得出結論使用平衡樹 我用的是treap,如果刪的話就要把整顆左子樹和根節點一起刪再處理右子樹的,其他操作和普通平衡樹一樣,可以看我之前那個模板。...
鬱悶的出納員(bzoj 1503)
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量...