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
題解平衡樹的插入刪除以及查詢
用treap和splay都寫了一下,然而splay至今沒出來,發上來以後再調(果真我還是無比的弱)
treap
1 #include2 #include3 #include4 #include5using
namespace
std;
6struct
datatr[100001];9
intn,m;
10int
root,cnt,ans,delta;
11void updata(int k)
12void rturn(int &k)
2021
void lturn(int &k)
2930
void insert(int &k,int
x)35 tr[k].s++;
36if (x
40else44}
4546
int del(int &k,int x)
52else55}
5657
int find(int k,int
x)63
64int
main()
73if (ch[0]=='
a') delta+=x;
74if (ch[0]=='f'
) 79
}80 printf("%d"
,ans);
81 }
splay(錯的)
1 #include2 #include3 #include4
using
namespace
std;
5const
int maxn=100010; 6
int tr[maxn][2],fa[maxn],num[maxn],ans,n,x,t1,t2,size1=0
,rt,
7size[maxn],delta,min;89
void pushup(int
x)
1213
void rotate(int x,int &k)
19 fa[x]=z; fa[y]=x; fa[tr[x][r]]=y;
20 tr[y][l]=tr[x][r]; tr[x][r]=y;
21pushup(x);pushup(y);22}
2324
void splay(int x,int &k)
32rotate(x,rt);33}
34}3536
void insert(int x,int &k,int
last)
40if (x>=num[k]) insert(x,tr[k][1],k); else insert(x,tr[k][0
],k);
41//
pushup(k);42}
4344
45int find(int &k,int
rank)
5152
int dec(int &x,int
f)60
else
64return
mid;65}
6667
intmain()
74if (ch[0]=='
a') delta+=x;
75if (ch[0]=='s'
) 79
if (ch[0]=='f'
) 83
}84 printf("
%d\n
",ans);
85 }
bzoj1503 NOI2004 鬱悶的出納員
本題依然是一道資料結構題,對本題而言,依然可以用splay來解。本題的乙個難點 對於我這個弱菜而言 是如何動態的改變平衡樹中的值。其實我們可以借鑑線段樹中的lazy tag的思想,因為若要變動則是整棵樹一起變,所以我們可以開設乙個全域性變數delta表示此時對整棵樹的改變值,這樣一來,在每次插入節點...
BZOJ1503 NOI2004 鬱悶的出納員
分析 一段裸的splay,支援upper bound,lower bound,然後和線段樹一樣lazy tag一下 寫得太醜qaq 注 如果加入的員工由於工資小於最低工資立刻離開了公司,此人不計入被炒員工總數 於是本題為我的ac率做出了巨大的貢獻 也可以不lazy tag,這題可以在外面開乙個tag...
bzoj1503 NOI2004 鬱悶的出納員
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量...