#include <bits/stdc++.h>
#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define N 1000005
using namespace std;
typedef pair < int , int > ii;
typedef vector < int > vi;
int n, ans, a[N];
pair < int , int > b[N];
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%d",a + i);
b[i] = mp(a[i]%2, i);
}
sort(b + 1, b + n + 1);
for(int k = 0; k <= 29; k++){
int say = 0;
// for(int i = 1; i <= n; i++)cout << b[i].st << " ";cout << endl;
// int x = lower_bound(b + 1, b + n + 1, mp((1<<k) - b[1].st ,0) ) - b;
// int y = lower_bound(b + 1, b + n + 1, mp((1<<(k+1) ) - b[1].st ,0) ) - b;
// int z = lower_bound(b + 1, b + n + 1, mp((1<<k) + (1<<(k+1)) - b[1].st ,0) ) - b;
// say += y - x;
// say += n - z + 1;
int x = n, y = n, z = n;;
for(int i = 1; i <= n; i++){
// while(x >= 2 and b[x - 1] >= mp((1<<k) - b[i].st ,0))x--;
// while(y >= 2 and b[y - 1] >= mp((1<<(k+1) ) - b[i].st ,0))y--;
// while(z >= 2 and b[z - 1] >= mp((1<<k) + (1<<(k+1)) - b[i].st ,0))z--;
int x = lower_bound(b + i, b + n + 1, mp((1<<k) - b[i].st ,0) ) - b;
int y = lower_bound(b + i, b + n + 1, mp((1<<(k+1) ) - b[i].st ,0) ) - b;
int z = lower_bound(b + i, b + n + 1, mp((1<<k) + (1<<(k+1)) - b[i].st ,0) ) - b;
say += y - x;
say += n - z + 1;
// printf("%d %d %d\n",x ,y ,z);
}
vector < ii > c;
int ind = 0;
for(int i = 1; i <= n; i++){
if(a[b[i].nd ]&(1<<(k + 1)))
c.pb(mp(b[i].st + (a[b[i].nd ]&(1<<(k + 1))) , b[i].nd));
else
b[++ind] = b[i];
// b[i].st += a[b[i].nd ]&(1<<(k + 1));
}
for(int i = 0; i < c.size(); i++)
b[++ind] = c[i];
sort(b + 1, b + n + 1);
ans += (1<<k)*(say%2);
}
printf("%d\n", ans);
return 0;
}
Compilation message
xorsum.cpp: In function 'int main()':
xorsum.cpp:53:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < c.size(); i++)
~~^~~~~~~~~~
xorsum.cpp:32:7: warning: unused variable 'x' [-Wunused-variable]
int x = n, y = n, z = n;;
^
xorsum.cpp:32:14: warning: unused variable 'y' [-Wunused-variable]
int x = n, y = n, z = n;;
^
xorsum.cpp:32:21: warning: unused variable 'z' [-Wunused-variable]
int x = n, y = n, z = n;;
^
xorsum.cpp:18:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&n);
~~~~~^~~~~~~~~
xorsum.cpp:20:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",a + i);
~~~~~^~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
376 KB |
Output is correct |
2 |
Correct |
22 ms |
612 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1666 ms |
20280 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1666 ms |
20280 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
376 KB |
Output is correct |
2 |
Correct |
22 ms |
612 KB |
Output is correct |
3 |
Incorrect |
601 ms |
20280 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
376 KB |
Output is correct |
2 |
Correct |
22 ms |
612 KB |
Output is correct |
3 |
Execution timed out |
1666 ms |
20280 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |