bzoj 1503鬱悶的出納員 splay

2022-04-06 03:31:56 字數 2869 閱讀 7647

time limit: 5 sec  memory limit: 64 mb

submit: 11759  solved: 4163

[submit][status][discuss]

oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量。我真不知道除了調工資他還做什麼其它事情。工資的頻繁調整很讓員工反感,尤其是集體扣除工資的時候,一旦某位員工發現自己的工資已經低於了合同規定的工資下界,他就會立刻氣憤地離開公司,並且再也不會回來了。每位員工的工資下界都是統一規定的。每當乙個人離開公司,我就要從電腦中把他的工資檔案刪去,同樣,每當公司招聘了一位新員工,我就得為他新建乙個工資檔案。老闆經常到我這邊來詢問工資情況,他並不問具體某位員工的工資情況,而是問現在工資第k多的員工拿多少工資。每當這時,我就不得不對數萬個員工進行一次漫長的排序,然後告訴他答案。好了,現在你已經對我的工作了解不少了。正如你猜的那樣,我想請你編乙個工資統計程式。怎麼樣,不是很困難吧?

輸出檔案的行數為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

2i命令的條數不超過100000 a命令和s命令的總條數不超過100 f命令的條數不超過100000 每次工資調整的調整量不超過1000 新員工的工資不超過100000

#include #include 

#include

#include

#define n 100010

#define ls(x) tr[x].l

#define rs(x) tr[x].r

#define fa(x) tr[x].fa

using

namespace

std;

struct

node

;node tr[n];

intn,m,tot,root,delta,sum;

void pushup(int

x)void zig(int

x)void zag(int

x)void splay(int x,intd)}

void insert(int

x)

int p=root,z;

while

(p)

if(xtot;

else rs(z)=++tot;

tr[tot].v=x,tr[tot].size=1,fa(tot)=z;

splay(tot,0);

}int del(int &x,int

f)else

returnk;}

int query(int x,int

k)int

main()

cout

return0;

}

ac**

#include#include

#include

#include

#define n 1000007

using

namespace

std;

int f[n],ch[n][2

],siz[n],cnt[n],key[n];

int lim,n,m,ans,tot,x,y,sz,root;char

c;inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}inline

void update(int

x)int

pre()

intnex()

int getson(int

x)void rorate(int

x)void splay(int

x)int findpos(int

x) ans+=cnt[now];now=ch[now][1

]; }

}}int findx(int

x) }

}void clear(int

x)void creat(int

x)void insert(int

x) fa=now;now=ch[fa][x>key[fa]];

if(!now)}}

}void del(int

x)

if(!ch[root][0]&&!ch[root][1

])

if(!ch[root][0

])

if(!ch[root][1

])

int pre1=pre(),tmp=root;splay(pre1);

ch[root][

1]=ch[tmp][1];f[ch[tmp][1]]=root;

clear(tmp);update(root);

}inline

void

del_tree()

intmain()

if(c=='f'

)

}printf(

"%d\n

",ans);

return0;

}

洛谷a,bzoj re

bzoj1503 鬱悶的出納員

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

BZOJ1503 鬱悶的出納員

出納員是乙個優秀的職業。根據題意要構造一種資料結構使得能動態維護乙個權值大於等於min的集合,並且支援查詢排名等操作,資料範圍來看複雜度是nlogn 由以上得出結論使用平衡樹 我用的是treap,如果刪的話就要把整顆左子樹和根節點一起刪再處理右子樹的,其他操作和普通平衡樹一樣,可以看我之前那個模板。...

鬱悶的出納員(bzoj 1503)

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