#include <iostream>
using namespace std;
const int N = 1<<20;
int ord[N], ord2[N], a[N], b[N], cnt[N];
int bin(int l, int r, int vl){
while (l + 1 < r){
int mid = (l + r) >> 1;
if (b[ord[mid]] >= vl)
r = mid;
else
l = mid;
}
return r;
}
void solve(int n, int k){
int z = 0;
for (int i=1;i<=n;i++){
if ((1<<k) & a[i])
b[i] += (1<<k);
else
z++;
swap(ord[i], ord2[i]);
}
for (int i=1, O = 0, Z = 0;i<=n;i++){
if (b[ord2[i]] & (1<<k))
O++, ord[z + O] = ord2[i];
else
Z++, ord[Z] = ord2[i];
}
for (int i=1;i<=n;i++){
int B = b[ord[i]];
int l1 = bin(i-1, n+1, (1<<k) - B);
int r1 = bin(i-1, n+1, (2<<k) - B);
int l2 = bin(i-1, n+1, (1<<k) + (2<<k) - B);
cnt[k] += n + 1 - l2;
cnt[k] += r1 - l1;
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n, Ans = 0;
cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i], ord[i] = i;
for (int i=0;i<29;i++)
solve(n, i);
for (int i=0;i<29;i++)
Ans += (1<<i) * (cnt[i] & 1);
cout<<Ans<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |