题目描述:
有一个长为n的数列,共有m次操作。每次操作会翻转一个区间l到r。问最终序列?
输入格式:
第一行一个整数n,表示序列中的元素个数。
第二行n个整数,表示原序列。
第三行一个整数m,表示翻转次数。
接下来m行每行两个整数l,r。
输出格式:
一行n个整数,表示最终序列。
样例输入:
3 1 2 3 1 1 2
样例输出:
2 1 3
答案:
#include<cstdio>
#include<iostream>
#define N 150010
using namespace std;
int fa[N],son[N][2],id[N],sz[N],rev[N],val[N];
int n,m,size,rt;
void pushup(int k){
int l=son[k][0],r=son[k][1];
sz[k]=sz[l]+sz[r]+1;
}
void pushdown(int k){
int l=son[k][0],r=son[k][1];
if(rev[k]){
swap(son[k][0],son[k][1]);
rev[l]^=1;rev[r]^=1;
rev[k]=0;
}
}
void rotate(int x,int &k){
int y=fa[x],z=fa[y],l,r