LOJ107 維護全序集

2021-08-28 16:32:00 字數 1569 閱讀 2284

題目描述

這是一道模板題,其資料比「普通平衡樹」更強。

如未特別說明,以下所有資料均為整數。

維護乙個多重集 s s s ,初始為空,有以下幾種操作:

把 x x x 加入 s s s

刪除 s s s 中的乙個 x x x,保證刪除的 x x x 一定存在

求 s s s 中第 k k k 小

求 s s s 中有多少個元素小於 x x x

求 s s s 中小於 x x x 的最大數

求 s s s 中大於 x x x 的最小數

操作共 n n n 次。

輸入格式

第一行乙個整數 n n n,表示共有 n n n 次操作 。

接下來 n n n 行,每行為以下幾種格式之一 :

輸出格式

對於每次詢問,輸出單獨一行表示答案。

樣例樣例輸入

5

0 30 4

2 21 4

3 3

樣例輸出

4

0

資料範圍與提示

1≤n≤3×105,0≤x≤109 1 \leq n \leq 3 \times 10 ^ 5, 0 \leq x \leq 10 ^ 9 1≤n≤3×105,0≤x≤109

**(旋轉treap):

#include using namespace std;

const int inf=1e9+7;

const int max=300005;

int n,m,tot,root=1,ans;

struct shu;

shu a[max];

inline int get_int()

inline void print(int x)

inline int new(int x)

inline void update(int p)

inline void build()

inline void zig(int &p)

inline void zag(int &p)

inline void insert(int &p,int x)

if(a[p].num==x)

if(xa[p].data) zig(p);

} else

update(p);

}inline void remove(int &p,int x)

if(a[p].l||a[p].r)

else p=0;

return;

} if(x=x) return val(a[p].l,x);

if(a[a[p].l].size+a[p].cnt>=x) return a[p].num;

return val(a[p].r,x-a[a[p].l].size-a[p].cnt);

}inline int sum(int p,int x)

inline int nxt(int p,int x)

int main()

} return 0;

}

CSUOJ 1258 維護序列

線段樹題目。此題的更新必須要更新到葉節點,否則的話,會出現錯誤。對於乙個int範圍內的數字,更新若干次 最多32次 後必然會變成0,那麼此時在更新就沒有意義了。那麼我們可以用lazy標記,當某個區間的數字全部變為0後,我們將這個區間做上標記。那麼這個區間就不可能在被更新,這樣就可以提高效率,減去不必...

bzoj 2453 維護佇列

你小時候玩過彈珠嗎?小朋友a有一些彈珠,a喜歡把它們排成佇列,從左到右編號為1到n。為了整個佇列鮮豔美觀,小朋友想知道某一段連續彈珠中,不同顏色的彈珠有多少。當然,a有時候會依據個人喜好,替換佇列中某個彈珠的顏色。但是a還沒有學過程式設計,且覺得頭腦風暴太浪費腦力了,所以向你來尋求幫助。輸入檔案第一...

BZOJ 1798 維護序列

線段樹 這 d 道 q 題 s 告訴我說 你沒學過線段樹 嗯 這題要好好想想 qaq 來吧首先要明確的事情是 delta now 記錄的是已經對當前點做過的,但是還沒有對當前點的兒子做過的操作 嗯 我們就這樣 慢慢的退一下 嗯 標記是給兒子用的 嗯 是給兒子用的 奉獻精神 然後,對於這個題,我們可以...