可持久化treap本質上市乙個二叉平衡樹,若不對其規則進行修改,中序遍歷後得出的序列是遞增的。
void maintain(o)
: 計算結點o的size
int lowcount(key)
: 比key所在位置小1
int uppercount(key)
: key所在的位置,如果有多個相同的key,選位置最大的
int select(int k)
: 找出第k小的數的值
node* merge(node* a, node* b):
合併,要用rank來合併
void split(node*a, int k, node*& l, node*& r)
: 拆分,k包含在l中
int rank(int key):
key的排名
void insert(int key):
插入key
int pred(int key)
: 找前驅,比key小的數中最大的那個
int succ(int key):
找後繼,比key大的數中最小的那個
#include
using
namespace std;
const
int maxn =
1e6+5;
#define lc son[o][0]
#define rc son[o][1]
struct treap
void
init()
void
maintain
(int o)
void
split
(int o,
int k,
int&l,
int&r)
else
if(sz[lc]
>= k)
else
}int
merge
(int a,
int b)
if(r[a]
< r[b]
)else
}int
lowcount
(int o,
int x)
intupcount
(int o,
int x)
intrank
(int x)
intkth
(int k)
intselect
(int o,
int k)
else
}return val[o];}
void
insert
(int x)
void
del(
int val)
intpred
(int x)
intsucc
(int x)
void
show()
void
print
(int o)};
treap treap;
typedef
long
long ll;
inline
intreadint()
intmain()
if(opt ==2)
if(opt ==3)
if(opt ==4)
if(opt ==5)
if(opt ==6)
}// treap.show();
return0;
}
#include
using
namespace std;
const
int maxn =
1e6+5;
#define lc son[o][0]
#define rc son[o][1]
struct treap
void
init()
void
maintain
(int o)
void
split
(int o,
int k,
int&l,
int&r)
else
if(sz[lc]
>= k)
else
}int
merge
(int a,
int b)
if(r[a]
< r[b]
)else
}int
lowcount
(int o,
int x)
intupcount
(int o,
int x)
intrank
(int x)
intkth
(int k)
intselect
(int o,
int k)
else
}return val[o];}
void
insert
(int x)
void
del(
int val)
intpred
(int x)
intsucc
(int x)
void
show()
void
print
(int o)};
treap treap;
typedef
long
long ll;
inline
intreadint()
intmain()
if(opt ==2)
if(opt ==3)
if(opt ==4)
if(opt ==5)
if(opt ==6)
}// treap.show();
return0;
}
可持久化Treap
本來是想寫一點題的,但是hfu最近讓我改鍵盤指法,原來都是亂打 手速蠻快就是錯的多 剛開始練手法真的煩躁,像我這種從來不用小指頭的 就寫個學習筆記吧.非教程向,只是懂了後寫點隨筆,練成指法說不定能來填坑.可持久化treap首先是基於非旋轉式treap的,如果要旋轉的話那麼就會破壞父子關係導致無法可持...
LOJ 持久化序列 可持久化treap
一道模板題 在寫完這道題以後就去找其他帶翻轉的可持久化treap題去寫了 發現自己根本不會可持久化treap 什麼標記翻轉可持久化 自閉了一整天 網上也沒有找到很好的模板 於是選擇擱置一段時間 等以後時間充裕了再來磕 includeusing namespace std const int maxn...
範浩強treap 可持久化
當平衡樹需要可持久化的時候,意味著我們需要訪問以前的某個時間點的平衡樹,就要保持以前的樹形態不變,新建乙個時間戳,構建一棵新的樹。如果用以前的旋轉treap可能就不方便做到 又要打時間戳,又要新建節點,又要旋轉 而且涉及到旋轉,空間可能會承受不住,我們需要用到一種新的平衡樹 fhq treap 這是...