#include <bits/stdc++.h>
using namespace std;
int n;
int v[1000005];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin>>n;
for(int i=1; i<=n; ++i) {
cin>>v[i];
}
int maxi = *max_element(v+1, v+n+1);
sort(v+1, v+n+1);
int ans = 0;
for(int bit = 32 - __builtin_clz(maxi); bit >= 0; --bit) {
int first = n+1;
for(int i=1; i<=n; ++i) {
if(v[i] & (1<<bit+1)) {
v[i] -= (1<<bit+1);
first = min(first, i);
}
}
inplace_merge(v+1, v+first, v+n+1);
int cnt = 0;
int p1 = n+1, p2 = n+1, p3 = n+1;
for(int i=1; i<=n; ++i) {
//v[j] + v[i] >= (1<<bit) && v[j] + v[i] < (1<<bit+1) ||
//v[j] + v[i] >= (1<<bit) + (1<<bit+1)
while(v[p1-1] >= (1<<bit) - v[i] && p1 > 1) --p1;
while(v[p2-1] >= (1<<bit+1) - v[i] && p2 > 1) --p2;
while(v[p3-1] >= (1<<bit) + (1<<bit+1) - v[i] && p3 > 1) --p3;
cnt += min(p2, i+1) - min(p1, i+1) + i - min(p3, i+1) + 1;
}
if(cnt & 1) {
ans |= (1<<bit);
}
}
cout<<ans;
return 0;
}
| # | 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... |