NC21191. tokitsukaze and Inverse Number
描述
输入描述
第一行包括一个正整数n(1≤n≤10^5)。
接下来一行,包括一个长度为n的序列,序列为1到n的一种排列。
第三行包括一个正整数q(1≤q≤10^5)。
接下来q行,每行包括三个正整数L,R,k(1≤L≤R≤n,1≤k≤10^9)。
所有变量的含义题面均有给出。
输出描述
在每次操作后,逆序数如果是奇数,就输出1,如果是偶数,就输出0。
示例1
输入:
4 2 3 1 4 3 1 3 2 2 4 1 2 3 1
输出:
0 0 1
说明:
原序列为:2 3 1 4C++11(clang++ 3.9) 解法, 执行用时: 83ms, 内存消耗: 1532K, 提交时间: 2018-12-07 19:32:27
#include<cstdio> using namespace std; int n,v[100006],a,b,tr[100007],ans,c; void add(int x,int s){for(;x<=n;x+=x&-x)tr[x]+=s;} int que(int x){int ans=0;while(x)ans+=tr[x],x-=x&-x;return ans;} int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&v[i]); add(v[i],1); ans^=((que(n))-que(v[i])&1); } scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d%d",&a,&b,&c); if(((b-a)&c&1)==1)ans^=1; printf("%d\n",ans); } }