BZOJ 1503 鬱悶的出納員(splay)

2021-09-07 23:10:50 字數 771 閱讀 3679

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