RT,我写的代码样例没过,但是交上去可以 A。
这份代码如下:
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) x&(-x)
using namespace std;
const int N=1e6+10,MAXN=1e6+5;
int n,ans,M;
int a[N],s[N];
int tree[N][2];
void update(int x,int op){
x++;
while(x<=M)
tree[x][op]++,x+=lowbit(x);
return;
}
int query(int x,int op){
int res=0;
x++;
while(x>0)
res+=tree[x][op],x-=lowbit(x);
return res;
}
signed main(){
M=MAXN;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int k=0;k<=20;k++){
int res=0;
memset(tree,0,sizeof(tree));
for(int i=0;i<=n;i++){
int num=s[i]&(1<<k);
int con=s[i]&((1<<k)-1);
if(num%2){
res+=query(con,0)+query(MAXN,1)-query(con,1);
update(con,1);
}
else{
res+=query(con,1)+query(MAXN,0)-query(con,0);
update(con,0);
}
}
if(res%2)
ans+=(1<<k);
}
cout<<ans;
return 0;
}