模板 文藝平衡樹

2021-10-01 02:32:54 字數 1353 閱讀 3235

點此看題

最近學了無旋treap

\text

treap

,那就用它來水一發吧。

反轉區間我們不考慮權值,一開始直接用merge

\text

merge

插入,修改時直接split

\text

split

出三個區間[1,

l−1]

,[l,

r],[

r+1,

n]

[1,l-1],[l,r],[r+1,n]

[1,l−1

],[l

,r],

[r+1

,n],對第二個區間打標記,然後暴力merge

\text

merge

即可。這裡用到了treap

\text

treap

打懶標記的思想,在split,merge

\text

split,merge

時都下傳標記,因為我們不考慮權值,所以我們下傳時直接交換左右兒子,最後答案時平衡樹的中序便利。

#include

#include

#include

#include

using

namespace std;

const

int maxn =

100005

;int

read()

int n,m,rt;

int ch[maxn][2

],siz[maxn]

,hp[maxn]

,fl[maxn]

;struct node

}emp;

voidup(

int x)

void

down

(int x)

node split

(int x,

int s)

else

up(x)

;return y;

}int

merge

(int x,

int y)

if(fl[y]

)down

(y);

ch[y][0

]=merge

(x,ch[y][0

]);up

(y);

return y;

}void

print

(int x)

intmain()

for(

int i=

1;i<=m;i++

)print

(rt)

;}

模板 文藝平衡樹

由於中序遍歷不會因為旋轉改變,平衡樹可以作為區間樹使用。翻轉用打標記的方法,splay x,y 代表把x接到以y為根的子樹下面。include include using namespace std const int maxn 100005 int n,m int val maxn siz max...

模板 文藝平衡樹

文藝平衡樹就是splay,維護區間反轉,就是把所有左變成右,打個標記就好啦.一開始智障判斷是否為根節點的時候傻乎乎的判斷是否等於0.刪了就好啦 題幹 題目描述43 21,翻轉區間是 2,4 的話,結果是5 234 1輸入輸出格式 輸入格式 第一行為n,m n表示初始序列有n個數,這個序列依次是 1,...

文藝平衡樹(splay模板)

題幹 splay模板,要求維護區間反轉。splay是一種碼量小於treap,但支援排名,前驅後繼等treap可求的東西,也支援區間反轉的平衡樹。但是有兩個壞處 1.splay常數遠遠大於treap以及stl中的set。2.沒有可持久化splay,但有可持久化treap。下面是 1.pushup以及p...