题目传送门
思维题,如果[1,a]区间的异或和为x,[1,b]区间的异或和也为x,那么(a,b]区间的异或和为0。这样我们只需求异或前缀和就行了。
map<ll, ll> mp;
int main()
{
ll n;
cin >> n;
ll sum = 0;
ll ans = 0;
mp[0] = 1;
while (n--)
{
ll a;
cin >> a;
sum ^= a;
ans += mp[sum];
mp[sum]++;
}
cout << ans << endl;
return 0;
}