求救
#include <bits/stdc++.h>
#define long long int
using namespace std;
const int N=1e5+10;
struct treap{
int left,right;
int val,heap;
int siz;
int lazy;
}tree[N];
int p,root;
struct node{
int x,y;
};
void upd(int x){
tree[x].siz=tree[tree[x].left].siz+tree[tree[x].right].siz+1;
}
void push_down(int x){
swap(tree[x].left,tree[x].right);
tree[tree[x].left].lazy^=1;
tree[tree[x].right].lazy^=1;
tree[x].lazy=0;
}
node split(int now,int v){
if (!now)return {0,0};
int x,y;
if (tree[now].lazy)push_down(now);
if (tree[now].val<=v){
x=now;
node t1=split(tree[now].right,v);
y=t1.y;
tree[now].right=t1.x;
}else{
y=now;
node t2=split(tree[now].left,v);
x=t2.x;
tree[now].left=t2.y;
}
upd(now);
return {x,y};
}
int merge(int x,int y){
if (!x||!y)return x+y;
if (tree[x].heap<tree[y].heap){
if (tree[x].lazy)push_down(x);
tree[x].right=merge(tree[x].right,y);
upd(x);
return x;
}else{
if (tree[y].lazy)push_down(y);
tree[y].left=merge(x,tree[y].left);
upd(y);
return y;
}
}
int create(int x){
tree[++p].siz=1;
tree[p].val=x;
tree[p].heap=rand()*rand();
return p;
}
void reverse_(int l,int r){
node t1=split(root,l-1);
node t2=split(t1.y,r-l+1);
tree[t2.x].lazy^=1;
root=merge(merge(t1.x,t2.x),t2.y);
}
void out_treap(int x){
if (tree[x].lazy)push_down(x);
if (tree[x].left)out_treap(tree[x].left);
cout<<x<<" ";
if (tree[x].right)out_treap(tree[x].right);
}
int n,m;
signed main(){
cin>>n>>m;
for (int i=1;i<=n;i++)
root=merge(root,create(i));
for (int i=1;i<=m;i++){
int l,r;
cin>>l>>r;
reverse_(l,r);
}
out_treap(root);
return 0;
}