學習筆記 Treap

2021-06-18 17:38:36 字數 948 閱讀 9111

學習treap之前先學的splay,然後發現treap真是太簡單了,greatwall1995神犇的意見要聽啊

bst的缺陷是因為人為搞單調資料才爆的,隨機資料還是logn的時間,treap的思想也基於此,給每個新增的點賦乙個隨機優先值,然後整個樹關於優先值是乙個堆。

clrs上要求讀者證明插入節點後期望的旋轉次數小於2,看到之後就嚇呆了

接下來是具體實現,lrj的**實在是太漂亮了,忍不住貼出來

const int maxn=1000;

double random()

int random(int m)

struct node

int cmp(int x)const

};node* root;

void rotate(node* & o,int d)

node* find1(node* o,int x)

void insert(node* &o,int x)

else

o->maintain();

}void remove(node* &o,int x)else

}else remove(o->ch[d],x);

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

}int rank(node* t,int key)

int kth(node* o,int k)

要注意:

1、這個**較短,但常數較大

2、這個**不能實現高效的prev和next操作

3、如果在linux上交這個**會ce,因為linux不支援相同名字不同型別的兩個函式

4、這個版本有個限制,不能出現重複資料,修改的話insert把cmp換掉即可

用這個treap試了下營業額統計,和splay不相上下,treap的next和prev操作比splay慢,否則的話貌似要比splay快很多

Treap學習筆記

開乙個坑,學一學treap專題 mark乙個習題集 帶旋轉treap模板 struct treap tr 100005 int n,size,root,ans void update int k 更新結點資訊 旋轉 void rturn int k void lturn int k void ins...

Treap 學習筆記

tre ap treap trea p,顧名思義,就是tre e he ap tree heap tree h eap,是一種常見的平衡樹。b st bstbs t性質給定一棵二叉樹,樹上的每個節點帶有乙個權值。對於樹上的任意乙個節點,滿足 滿足這兩條性質的二叉樹就是 二叉查詢樹 bst bstbs...

Treap 學習筆記

平衡樹就是一種可以在log的時間複雜度內完成資料的插入,刪除,查詢第k大,查詢排名,查詢前驅後繼以及其他許多操作的資料結構。treap是一種比較好寫,常數比較小,可以實現平衡樹基本操作的一種平衡樹。treap的平衡是基於隨機化。是將堆與二叉查詢樹結合起來所得到的資料結構。treap在插入數時,給每個...