文藝平衡樹

2022-04-09 11:31:25 字數 995 閱讀 9260

和splay差不多,就是維護區間,把siz值為l-1+1與r+1+1的兩個節點,將乙個旋轉到根,另乙個旋轉到根的右兒子上,則要修改的區間就是根的右孩子的左子樹,直接打標記即可。

推薦:遠航之曲dalao

//writer : hsz %wjmzbmr%tourist%hzwer

#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long

#define m(a,b) memset(a,b,sizeof a)

using namespace std;

const int inf=0x3fffffff;

int in()

while(ch>='0'&&ch<='9')

return x*f;

}void out(int x)

for(int j=wei; j>=1; --j) putchar('0'+a[j]);

putchar(' ');

}const int n=500005;

int data[n],n,m;

struct splay

bool check(int x)

void pushdown(int x)

return;

} void rotate(int x)

void splay(int x,int tar)

if(!tar) root=x;

} int fnd(int k)

} }int build(int f,int l,int r)

void print(int x)

} sbt;

int main()

sbt.print(sbt.root);

return 0;

}

文藝平衡樹

前置知識 普通平衡樹。實際上,平衡樹能做到的操作不只有插入刪除,查排名查值,前驅後繼這些。如果我們把平衡樹移到區間上,我們甚至能夠支援比線段樹更強的操作 區間翻轉。這就是文藝平衡樹這道題了。首先我們來明確一下區間樹的概念。顧名思義,區間樹就是用來維護區間的。具體地,我們規定平衡樹的中序遍歷得到的數列...

模板 文藝平衡樹

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

模板 文藝平衡樹

點此看題 最近學了無旋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 ...