演算法標籤 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 性質 這是一棵二叉樹。對於任意乙個...