Description
给你一个长度为 (N) 的序列,有 (M) 次操作。每次翻转 ([l,r]) 的区间,每次操作后询问序列逆序对个数的奇偶性。
Solution
翻转一个子区间个数为偶数的区间,逆序对个数奇偶性不变
翻转一个子区间个数为奇数的区间,逆序对个数奇偶性改变
#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int ar[N],a[N],n,m,u,v;
int lowbit(int t) {return t&(-t);}
void add(int i,int v) {
for(;i<N;i+=lowbit(i)) ar[i]+=v;
}
int sum(int i) {
int s=0;
for(;i>0;i-=lowbit(i)) s+=ar[i];
return s;
}
signed main() {
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
}
int ans=0;
for(int i=1;i<=n;i++) {
ans+=sum(n)-sum(a[i]);
add(a[i],1);
}
ans&=1;
cin>>m;
for(int i=1;i<=m;i++) {
cin>>u>>v;
int t=v-u+1;
t=t*(t-1)/2;
if(t%2) {
ans^=1;
}
cout<<(ans?"odd":"even")<<endl;
}
}