bzoj1503 Splay 鬱悶的出納員

2021-08-18 14:27:53 字數 2685 閱讀 5520

description

oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的

工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好

,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量。我

真不知道除了調工資他還做什麼其它事情。工資的頻繁調整很讓員工反感,尤其是集體扣除工資的時候,一旦某位

員工發現自己的工資已經低於了合同規定的工資下界,他就會立刻氣憤地離開公司,並且再也不會回來了。每位員

工的工資下界都是統一規定的。每當乙個人離開公司,我就要從電腦中把他的工資檔案刪去,同樣,每當公司招聘

了一位新員工,我就得為他新建乙個工資檔案。老闆經常到我這邊來詢問工資情況,他並不問具體某位員工的工資

情況,而是問現在工資第k多的員工拿多少工資。每當這時,我就不得不對數萬個員工進行一次漫長的排序,然後

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

input

第一行有兩個非負整數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是乙個正整數。 在初始時,可以認為公司裡乙個員工也沒有。 i命令的條數不超過100000 a命令和s命令的總條數不超過100 f命令的條數不超過100000 每次工資調整的調整量不超過1000

新員工的工資不超過100000

output

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

-1

題解

splay裸題

可是我有乙個地方真的沒想懂,可能是**寫挫了??

if(tr[r].son[0]==f)tr[r].son[0]=r;

else

tr[r].son[1]=r;//(這個地方不能加if(tr[r].son[1]==f))

有沒有路過的大神能拯救一下的。。同機房的人加上都a了就我wa了。。

說一下吧,插入增加減少直接暴力搞因為少於100次

踢人的時候找前驅旋根然後直接刪子樹

(話說為什麼直接離開公司的不算最終答案???)

超級迷。。

#include

#include

#include

#include

#include

using namespace std;

struct node

tr[510000];int len,root;

void add(int d,int f)

void upd(int now)

void rotate(int

x,int w)

void splay(int

x,int rt)

else

}if(rt==0)root=x;

}int findip(int d)

else

if(d>tr[x].d)

else

return

x; }

}void ins(int d)

intx=findip(d);

if(tr[x].d==d)

else

}void findshuzi(int k)

printf("%d\n",tr[x].d);

}int findqianqu(int d)

returnx;}

void change(int

x,int c)

int t,mn,sum;

char ch[10];

int main()

ins(op);

}else

if(ch[1]=='a')change(root,op);

else

if(ch[1]=='s')

else root=tr[x].son[1],tr[root].f=0;

}else

}printf("%d\n",sum);

return

0;}

BZOJ 1503 鬱悶的出納員(splay)

題意 給出乙個數列 初始為空 給出乙個最小值min,當數列中的數字小於min時自動刪除。四種操作 1 數列中增加乙個元素,設定初始值x 若x小於min則不插入 2 所有的元素增加乙個值det 3 所有的元素減小乙個值det 此時有可能有一些會被刪除 4 詢問目前所有元素中第k大的。最後輸出刪除了多少...

BZOJ1503 鬱悶的出納員(Splay)

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

bzoj 1503鬱悶的出納員 splay

time limit 5 sec memory limit 64 mb submit 11759 solved 4163 submit status discuss oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,...