delete pics to save space
This commit is contained in:
90
1.3391.cpp
Normal file
90
1.3391.cpp
Normal file
@ -0,0 +1,90 @@
|
||||
#include<cstdio>
|
||||
#include<algorithm>
|
||||
using namespace std;
|
||||
struct Node
|
||||
{
|
||||
int v,s; char f;
|
||||
Node* ch[2];
|
||||
inline int cmp(int k)
|
||||
{
|
||||
int d=k-ch[0]->s;
|
||||
return d==1?-1:d>1;
|
||||
}
|
||||
inline void push_up()
|
||||
{ s=ch[0]->s+1+ch[1]->s; }
|
||||
inline void push_down()
|
||||
{
|
||||
if(!f) return;
|
||||
swap(ch[0],ch[1]);
|
||||
ch[0]->f^=1;
|
||||
ch[1]->f^=1;
|
||||
f=0;
|
||||
}
|
||||
};
|
||||
Node* null=new Node();
|
||||
inline void rotate(Node* &o,int d)
|
||||
{
|
||||
Node* p=o->ch[d^1];
|
||||
o->ch[d^1]=p->ch[d]; p->ch[d]=o;
|
||||
o->push_up();
|
||||
p->push_up();
|
||||
o=p;
|
||||
}
|
||||
void splay(Node* &o,int k)
|
||||
{
|
||||
o->push_down();
|
||||
int d=o->cmp(k);
|
||||
if(d==1) k-=o->ch[0]->s+1;
|
||||
if(d!=-1)
|
||||
{
|
||||
Node* &p=o->ch[d];
|
||||
p->push_down();
|
||||
int d2=p->cmp(k);
|
||||
if(d2==1) k-=p->ch[0]->s+1;
|
||||
if(d2!=-1)
|
||||
{
|
||||
splay(p->ch[d2],k);
|
||||
if(d==d2) rotate(o,d^1);
|
||||
else rotate(p,d);
|
||||
}
|
||||
rotate(o,d^1);
|
||||
}
|
||||
}
|
||||
Node* build(int L,int R)
|
||||
{
|
||||
if(L>R) return null;
|
||||
Node* res=new Node();
|
||||
res->v=(L+R)>>1; res->f=0;
|
||||
if(L==R) res->ch[0]=res->ch[1]=null;
|
||||
else res->ch[0]=build(L,((L+R)>>1)-1),res->ch[1]=build(((L+R)>>1)+1,R);
|
||||
res->push_up();
|
||||
return res;
|
||||
}
|
||||
int n,m,a,b;
|
||||
void print(Node* o)
|
||||
{
|
||||
o->push_down();
|
||||
if(o==null) return;
|
||||
print(o->ch[0]);
|
||||
if(o->v>=1&&o->v<=n) printf("%d ",o->v);
|
||||
print(o->ch[1]);
|
||||
}
|
||||
int main()
|
||||
{
|
||||
#ifdef local
|
||||
freopen("pro.in","r",stdin);
|
||||
freopen("pro.out","w",stdout);
|
||||
#endif
|
||||
null->s=null->f=0; null->ch[0]=null->ch[1]=null;
|
||||
scanf("%d%d",&n,&m);
|
||||
Node* root=build(0,n+1);
|
||||
while(m-->0)
|
||||
{
|
||||
scanf("%d%d",&a,&b);
|
||||
splay(root,a);
|
||||
splay(root->ch[1],b+2-root->ch[0]->s-1);
|
||||
root->ch[1]->ch[0]->f^=1;
|
||||
}
|
||||
print(root);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user