平衡樹模板 Treap

2021-08-04 06:45:30 字數 1182 閱讀 2346

演算法標籤 treap

種下第一棵平衡樹…

這是一道模板題。

如果覺得這個題水的可以做一下4544壓行,是千古神犇花爸爸出的神犇題。

您需要寫一種資料結構(可參考題目標題,但是這句話其實並沒有什麼用233),來維護一些數,其中需要提供以下操作:

1. 插入x數

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

3. 查詢x數的排名(若有多個相同的數,因輸出最小的排名)

4. 查詢排名為x的數

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

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

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

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

注意:這道題重複資料可以加入treap

#include 

#include

#include

#include

using namespace std;

const

int maxn = 100005;

struct node

inline

void maintain()

};void retate(node* &x, int d) //旋轉, d = 0 左旋 d = 1 右旋

void insert(node* &x, int k) //在以x為根的子樹中插入鍵值k,修改x

//x為空

else

x -> maintain();

}void remove(node* &x, int k) //在以x為根的子樹中刪除鍵值k,修改x

}else remove(x -> ch[x -> cmp(k)], k);

if(x != null) x -> maintain();

}int rank(node *x, int k) //查詢k的排名

int kth(node *x, int k) //查詢第k小元素

int last(node *x, int k) //求k的前驅

int next(node *x, int k) //求k的後繼

int main()

return

0;}

模板 普通平衡樹 Treap

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

P3369 平衡樹treap模板

第一次學,調了兩天 乙個操作乙個操作的講 插入,這個沒啥好說的,將乙個點插入樹中,定義乙個insert int o,int v 函式,o傳的引用,改變o值時,root也會跟著改變,先判斷當前傳入值是否存在值,即當前o是否等於0,等於0則沒有用過,初始化乙個prio rand 即給當前插入點隨機附乙個...

平衡樹之Treap

乙個集合支援快速插入 刪除乙個數字。支援快速查詢乙個數字在所有已插入數字中的排名。支援刪除大小在某乙個區間內的數字。動態維護乙個數列。可以在數列的任何位置插入刪除,求區間和,min,max,進行區間翻轉 這就需要用到二叉查詢樹 binary search tree 性質 這是一棵二叉樹。對於任意乙個...