1 条题解
-
1
#include<bits/stdc++.h> using namespace std; int n,q,t,x,l,r; template<typename T> class Splay { static int rt,tot; struct node { T v;int lc,rc,cnt,sum,fa,la; node(){} node(T x){v=x;lc=rc=fa=la=0;cnt=sum=1;} }a[2000005]; void pushdown(int x) { a[x].la=0; if(a[x].lc)a[a[x].lc].la^=1; if(a[x].rc)a[a[x].rc].la^=1; swap(a[x].lc,a[x].rc); } void upt(int &x){a[x].sum=a[a[x].lc].sum+a[a[x].rc].sum+a[x].cnt;} void lx(int x) { int t=a[x].rc; a[x].rc=a[t].lc;if(a[t].lc)a[a[t].lc].fa=x; a[t].fa=a[x].fa;a[t].lc=x; a[a[x].fa].lc==x?a[a[x].fa].lc=t:a[a[x].fa].rc=t;a[x].fa=t;upt(t);upt(x); } void rx(int x) { int t=a[x].lc; a[x].lc=a[t].rc;if(a[t].rc)a[a[t].rc].fa=x; a[t].fa=a[x].fa;a[t].rc=x; a[a[x].fa].lc==x?a[a[x].fa].lc=t:a[a[x].fa].rc=t;a[x].fa=t;upt(t);upt(x); } public: T v(int x){return a[x].v;}; void splay(int x,int fa=0) { while(a[x].fa!=fa) { int y=a[x].fa,z=a[y].fa; if(z!=fa)(a[y].lc==x)^(a[z].lc==y)?(a[y].rc==x?lx(y):rx(y)):(a[z].rc==y?lx(z):rx(z)); a[a[x].fa].rc==x?lx(a[x].fa):rx(a[x].fa); } if(!fa)rt=x; } void insert(T v,int &x=rt,int fa=0) { if(!x)return x=++tot,a[x]=v,a[x].fa=fa,splay(x); if(v<a[x].v)insert(v,a[x].lc,x); else if(v>a[x].v)insert(v,a[x].rc,x); } T kth(int k,int x=rt) { int kk=k; while(x) { if(a[x].la)pushdown(x); if(a[a[x].lc].sum<k) if(a[a[x].lc].sum+a[x].cnt>=k)break; else k-=a[a[x].lc].sum+a[x].cnt,x=a[x].rc; else x=a[x].lc; } return x; } void reverse(int l,int r) { splay(kth(l)),splay(kth(r+2),rt); a[a[a[rt].rc].lc].la^=1; } void print(int x=rt) { if(!x)return; if(a[x].la)pushdown(x); //cout<<a[x].v<<" "<<a[a[x].lc].v<<" "<<a[a[x].rc].v<<endl; print(a[x].lc); if(a[x].v!=INT_MAX&&a[x].v!=INT_MIN)cout<<a[x].v<<" "; print(a[x].rc); } Splay(){rt=tot=0;} }; template<typename T>int Splay<T>::rt=0; template<typename T>int Splay<T>::tot=0; Splay<int> a; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); a.insert(INT_MAX); a.insert(INT_MIN); cin>>n>>q; for(int i=1;i<=n;i++)a.insert(i); while(q--)cin>>l>>r,a.reverse(l,r); a.print(); return 0; }
- 1
信息
- ID
- 5536
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者