1.异或前缀和
2.20位互不干扰,逐位枚举
3.1与前面的0异或,0与前面的1异或,才能对最终结果有贡献,
所以n0,n1统计前面0和1的数量,有几个则贡献多少次
4.不开long long见祖宗
#include<iostream>
using namespace std;
using ll=long long;
const int N=1e5+5;
int n,a[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){int t;scanf("%d",&t);a[i]=t^a[i-1];}
ll ans=0;
for(int i=0;i<=20;i++){
int n0=1,n1=0;
ll res=0;
for(int j=1;j<=n;j++){
if(a[j]>>i&1) res+=n0,n1++;
else res+=n1,n0++;
}
ans+=res*(1<<i);
}
printf("%lld",ans);
return 0;
}