bzoj1503 鬱悶的出納員 splay模板

2021-09-26 01:25:11 字數 1852 閱讀 1555

題目

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