P3369 模板 普通平衡樹FHQtreap

2022-04-06 17:37:56 字數 1470 閱讀 6078

插入x數

刪除x數(若有多個相同的數,因只刪除乙個)

查詢x數的排名(排名定義為比當前數小的數的個數+1。若有多個相同的數,因輸出最小的排名)

查詢排名為x的數

求x的前驅(前驅定義為小於x,且最大的數)

求x的後繼(後繼定義為大於x,且最小的數)

輸入格式:

第一行為n,表示操作的個數,下面n行每行有兩個數opt和x,opt表示操作的序號( 1 \leq opt \leq 61≤opt≤6 )

輸出格式:

對於操作3,4,5,6每行輸出乙個數,表示對應答案

輸入樣例#1: 複製

10

1 106465

4 11 317721

1 460929

1 644985

1 84185

1 89851

6 81968

1 492737

5 493598

輸出樣例#1: 複製

106465

84185

492737

時空限制:1000ms,128m

1.n的資料範圍: n \leq 100000n≤100000

2.每個數的資料範圍: [-^7, ^7][−107,107]

在此鳴謝

1 #include2 #include3

4using

namespace

std;56

const

int n = 500100;7

int ch[n][2

],siz[n],key[n],val[n];

8int

tn,root;

910 inline char

nc()

14 inline int

read()

22 inline void pushup(int

x) 25 inline int makenode(int

x) 28

29int merge(int x,int

y) 35

else39}

40void split(int now,int k,int &x,int &y) 49}

50 inline int getkth(int p,int

k) 56}57

intmain()

65else

if (opt==2

) 71

else

if (opt==3

) 76

else

if (opt==4

) 77 printf("

%d\n

",val[getkth(root,k)]);

78else

if (opt==5

) 83

else88}

89return0;

90 }

P3369 模板 普通平衡樹

題目描述 您需要寫一種資料結構 可參考題目標題 來維護一些數,其中需要提供以下操作 1 插入x數 2 刪除x數 若有多個相同的數,因只刪除乙個 3 查詢x數的排名 排名定義為比當前數小的數的個數 1。若有多個相同的數,因輸出最小的排名 4 查詢排名為x的數 5 求x的前驅 前驅定義為小於x,且最大的...

P3369 模板 普通平衡樹

aimee 考試前看到某份考綱提到了平衡樹 突發奇想想學乙個 但是來不及了,為了平衡學習時間,以及大佬的建議下,毅然決定用vector搞乙個 額,要是vector都過不了,那以我的水平,也拿不到更多的分了 配方,lower bound upper bound vector 對於操作1,使用vecto...

P3369 模板 普通平衡樹

這道題最簡單的解法 權值線段樹。下面的程式為了方便大家理解沒有離散化哦。操作 i ii 插入 刪除 x 數procedure change l,r,k,key,add longint var mid longint begin inc tree k add if l r then exit mid ...