请问为什么提示我编译失败啊?
/*
异或;如果1的个数是奇数个,则异或结果为1,否则为0
当一个区间内,这一位所对的1的个数是奇数时,这一位就产生了贡献;
当一个区间内,这一位所对的1的个数是偶数时,这一位就不产生贡献;
统计第i位所对的1的前缀和,如果到某个数字时,
所对前缀和是奇数,那么他就能够提供 (1+前面偶数的个数)个合法区间(即选取几个元素);
如果所对前缀和是偶数,那么他就能够提供 (前面奇数的个数)个合法区间
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)
cin>>a[i];
int ans=0; //贡献总值
for(int i=19;i>=0;i--) //遍历每一位
{
int s=0,n0=1,n1=0;
//s为前缀和,即在第i位上到某个元素为止1的总数
//n0为各前缀和为偶数个的个数
//n0=1是因为当所对前缀和为奇数时算合法区间时用到(1+前面偶数的个数)
//n1为各前缀和为奇数个的个数(n0和n1相当于合法区间个数)
for(int j=0;j<n;j++) //遍历每一个元素
{
int bit=(a[j]>>i)&1; //可判断元素a[j]在第i位上是否为1
s+=bit;
if(!s%2) //奇数
{
ans+=(1<<i)*n0;
n1++;
}
else
{
ans+=(1<<i)*n1;
n0++;
}
}
}
cout<<ans<<std::endl;
}
int main()
{
ios::sync_with_stdio(0);
/*用于取消C++的输入/输出流与C的输入/输出函数(如printf和scanf)之间的同步。
这样做通常可以加速输入/输出操作,特别是在使用C++的输入/输出流(如cin和cout)时。*/
cin.tie(0);
/*将cin与cout解绑。默认情况下,cin和cout是绑定的,这意味着每次从cin读取数据后,
cout都会刷新其缓冲区。解绑它们可以提高输入/输出的效率。*/
//cout.tie(0)
solve()
return 0;
}