插入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: 複製1 106465
4 11 317721
1 460929
1 644985
1 84185
1 89851
6 81968
1 492737
5 493598
106465時空限制:1000ms,128m84185
492737
1.n的資料範圍: n \leq 100000n≤100000
2.每個數的資料範圍: [-^7, ^7][−107,107]
在此鳴謝
treap 真是個好東西。。
1 #include2 #include3 #include4更新後的treapusing
namespace
std;56
const
int n = 200010;7
8struct
datat[n];
11int
root,tn,ans;
1213 inline char
nc()
17 inline int
read()
2526 inline void pushup(int
x) 29 inline void leftturn(int &k)
37 inline void rightturn(int &k)
45void insert(int &k,int
x) 52 t[k].siz++;
53if (t[k].val==x) t[k].cnt ++;
54else
if (x >t[k].val)
58else62}
63void delete(int &k,int
x) 69
if (t[k].l * t[k].r == 0) k = t[k].l +t[k].r;
70else
if (t[t[k].l].key
73else76}
77else
if (x >t[k].val)
80else83}
84int getk(int k,int
x) 91
int getkth(int k,int
x) 98
void getpre(int k,int
x) 103
void getsuc(int k,int
x) 108
109int
main()
120return0;
121 }
1 #include2 #include3 #include4view code5using
namespace
std;67
#define lson t[k].l
8#define rson t[k].r
9const
int n = 200010;10
11struct
datat[n];
14int
root,tn,ans;
1516 inline char
nc()
20 inline int
read()
2829 inline void pushup(int
k) 32 inline void leftturn(int &k)
40 inline void rightturn(int &k)
48void insert(int &k,int
x) 55 t[k].siz++;
56if (t[k].val==x) t[k].cnt ++;
57else
if (x >t[k].val)
61else65}
66void delete(int &k,int
x) 72
if (lson * rson == 0) k = lson +rson;
73else
if (t[lson].key
76else79}
80else
if (x >t[k].val)
83else86}
87int getk(int k,int
x) 94
int getkth(int k,int
x) 101
void getpre(int k,int
x) 106
void getsuc(int k,int
x) 111
112int
main()
123return0;
124 }
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 ...