复习一波splay算法。
先来一道模板题,多开两个哨兵节点便于我们将l-1转到根上,r+1转到l-1的右子树上,这样反转的区间就是根的右子树的左子树。
类似线段树开懒标记,每次操作复杂度O(logN)
By:大奕哥
1 #include2 using namespace std; 3 const int N=1e5+10; 4 struct node 5 { 6 int l,r,s,f,lz; 7 }t[N]; 8 int n,m,rt; 9 void merge(int x)10 {11 t[x].s=t[t[x].l].s+t[t[x].r].s+1;12 }13 void build(int l,int r,int x)14 {15 if(l>r)return;16 int mid=l+r>>1;t[mid].f=x;17 if(mid 1&&x >1;82 for(int i=1;i<=m;++i)83 {84 scanf("%d%d",&l,&r);85 int L=find(rt,l);int R=find(rt,r+2);86 splay(L,rt);splay(R,t[L].r);87 t[t[R].l].lz^=1;88 }89 write(rt);90 return 0;91 }