主函数
```cpp
int main(){
cin>>n>>m;
int minn=1,maxx=n;
memset(tree,0,sizeof(tree));
change(R,1,n,1,n);
int last=0;
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d",&a);
if (a==1){
scanf("%d%d",&b,&c);
b-=last;c-=last;
if (!ma.count(b))ma[b]=b;
int left,right;
search(R,ma[b],left,right);
ma[c]=ma[b];
del(R,left);
if (ma[b]>left)change(R,left,ma[b]-1,left,ma[b]-left);
if (ma[b]<right)change(R,ma[b]+1,right,ma[b]+1,right-ma[b]);
change(R,ma[b],ma[b],c,1);
last=rank(R,ma[b]);
printf("%d\n",last);
}
if (a==2){
scanf("%d",&b);
b-=last;
if (!ma.count(b))ma[b]=b;
last=rank(R,ma[b]);
int left,right;
search(R,ma[b],left,right);
del(R,left);
if (ma[b]>left)change(R,left,ma[b]-1,left,ma[b]-left);
if (ma[b]<right)change(R,ma[b]+1,right,ma[b]+1,right-ma[b]);
ma[b]=--minn;
change(R,ma[b],ma[b],c,1);
printf("%d\n",last);
}
if (a==3){
scanf("%d",&b);
b-=last;
if (!ma.count(b))ma[b]=b;
last=rank(R,ma[b]);
int left,right;
search(R,ma[b],left,right);
del(R,left);
if (ma[b]>left)change(R,left,ma[b]-1,left,ma[b]-left);
if (ma[b]<right)change(R,ma[b]+1,right,ma[b]+1,right-ma[b]);
ma[b]=++maxx;
change(R,ma[b],ma[b],c,1);
printf("%d\n",last);
}
if (a==4){
scanf("%d",&b);
b-=last;
if (!ma.count(b))ma[b]=b;
last=find(R,b);
printf("%d\n",last);
}
}
return 0;
}
```
by 吾王美如画 @ 2019-02-16 23:17:34
那个好心的大佬帮我康康吧QAQ
by 吾王美如画 @ 2019-02-16 23:18:19
切黑题 Orz
by VenusM1nT @ 2019-02-17 08:16:39
@[Venus](/space/show?uid=23243) orz
by 吾王美如画 @ 2019-02-17 09:52:15
我看第九个测试点还蛮大的鸭,为毛就这个过了
by 吾王美如画 @ 2019-02-17 10:07:46
好吧,我又犯沙雕错误了
by 吾王美如画 @ 2019-02-17 10:55:24