插入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: 複製
101 106465
4 11 317721
1 460929
1 644985
1 84185
1 89851
6 81968
1 492737
5 493598
輸出樣例#1: 複製
10646584185
492737
時空限制:1000ms,128m
1.n的資料範圍: n \leq 100000n≤100000
2.每個數的資料範圍: [-^7, ^7][−107,107]
在此鳴謝
1 #include2 #include34using
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 ...