題意:給出乙個數列(初始為空),給出乙個最小值min,當數列中的數字小於min時自動刪除。四種操作:(1)數列中增加乙個元素,設定初始值x;若x小於min則不插入;(2)所有的元素增加乙個值det;(3)所有的元素減小乙個值det;此時有可能有一些會被刪除(4)詢問目前所有元素中第k大的。最後輸出刪除了多少個。
思路:首先,因為增加和減小是對所有元素而言,因此這個值我們不插入而是單獨儲存,設這個值為det。那麼插入乙個元素x,我們插入x-det,這樣保持插入的所有元素的真實值都是其加上det。然後,每次減小時,我們需要進行刪除,那麼插入乙個min-det的節點,並將其調整到根節點,然後左子樹就是被刪除的。之後,將根節點的右節點變為根節點。
int tot,root,k[n],l[n],r[n],f[n],s[n];
inline void pushup(int x)
inline void zig(int x)
inline void zag(int x)
inline void splay(int x)
else l[y]==x?zig(x):zag(x);
}root=x;
}inline void insert(int key)
inline int select(int k)
int main()
else if(op[0]=='f') pr(x>s[root]?-1:select(s[root]-x+1)+d);
}pr(ans);
return 0;
}
bzoj1503 鬱悶的出納員
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的 工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好 就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的...
BZOJ1503 鬱悶的出納員
出納員是乙個優秀的職業。根據題意要構造一種資料結構使得能動態維護乙個權值大於等於min的集合,並且支援查詢排名等操作,資料範圍來看複雜度是nlogn 由以上得出結論使用平衡樹 我用的是treap,如果刪的話就要把整顆左子樹和根節點一起刪再處理右子樹的,其他操作和普通平衡樹一樣,可以看我之前那個模板。...
鬱悶的出納員(bzoj 1503)
oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量...