Fhq Treap無旋Treap練習

2021-09-25 22:04:41 字數 2047 閱讀 6642

洛谷p3369 【模板】普通平衡樹

split採用按權

/*

author:revolia

submit:;

*/#includeusing namespace std;

typedef long long ll;

const int maxn=1e6+5;

int l[maxn],r[maxn],val[maxn],size[maxn];

int rom[maxn],cnt;

int root,opt,n,a,x,y,z;

void update(int x)

int new(int x)

void split(int u,int k,int &x,int &y)

if(val[u]<=k)x = u,split(r[u],k,r[u],y);

else y = u,split(l[u],k,x,l[u]);

update(u);

}int merge(int x,int y)

void push_down(int x)

int new(int x)

void split(int u,int k,int &x,int &y)

if(flag[u])push_down(u);

if(size[l[u]]bzoj1251: 序列終結者

splay很像的操作

max維護區間最值,lazy區間加,flag區間翻轉標記

/*author:revolia

submit:;

*/#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+5;

int l[maxn],r[maxn],val[maxn],size[maxn];

int rom[maxn],cnt;

int flag[maxn],lazy[maxn],max[maxn];

int root,opt,n,m,a,x,y,z;

void update(int x,int w)

void push_up(int x)

void push_down(int x)

if(lazy[x])

}int new(int x)

void split(int u,int k,int &x,int &y)

push_down(u);

if(size[l[u]]p3372 【模板】線段樹 1

果然,學了乙個東西看到啥都想去套一下、

/*author:revolia

submit:;

*/#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+5;

int l[maxn],r[maxn],val[maxn],size[maxn];

int rom[maxn],cnt;

ll lazy[maxn],sum[maxn];

int root,opt,n,m,a,x,y,z;

void update(int x,int w)

void push_up(int x)

void push_down(int x)

}int new(int x)

void split(int u,int k,int &x,int &y)

push_down(u);

if(size[l[u]]else y = u,split(l[u],k,x,l[u]);

push_up(u);

}int merge(int x,int y)

push_down(y);

l[y] = merge(x,l[y]);

return push_up(y),y;

}int main()else

root = merge(merge(x,y),z);

}return 0;

}

fhq treap(無旋treap) 學習筆記

首先最好要會寫treap 也先了解一下笛卡爾樹是什麼。fhq treap和treap同樣有乙個隨機分配的rnd值,用於平衡,但fhq treap不需要旋轉操作來維持平衡,因為有兩個神奇的操作merge和split 在兩種操作之前,要明確的一點是fhq treap依靠rnd值來維護平衡,把每個點按照小...

演算法學習 FHQ Treap (無旋Treap)

fhq treap和普通的treap都是乙個二叉搜尋堆,其同時滿足二叉樹的性質 左子樹的權值小於等於當前節點權值,右子樹權值大於當前節點權值 和堆的性質 對於小根堆,當前節點的優先順序是堆中最小的 fhq treap與一般的treap的不同之處主要在於 不用旋轉,用split和merge來為維護堆的...

演算法學習 Fhq Treap(無旋Treap)

treap 大名鼎鼎的隨機二叉查詢樹,以優異的效能和簡單的實現在oier們中廣泛流傳。這篇blog介紹一種不需要旋轉操作來維護的treap,即無旋treap,也稱fhq treap。它的巧妙之處在於只需要分離和合併兩種基本操作,就能實現任意的平衡樹常用修改操作。而不需要旋轉的特性也使編寫 時不需要考...