# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
128624 | E869120 | XOR Sum (info1cup17_xorsum) | C++14 | 1661 ms | 16864 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
using namespace std;
#pragma warning (disable: 4996)
class BIT {
public:
vector<int> bit; int size_ = 0;
void init(int sz) {
size_ = sz + 2;
bit.resize(size_ + 2, 0);
}
void add(int pos, int x) {
pos++;
while (pos <= size_) {
bit[pos] += x;
pos += (pos&-pos);
}
}
int sum(int pos) {
pos++; int s = 0;
while (pos >= 1) {
s += bit[pos];
pos -= (pos&-pos);
}
return s;
}
};
int N, A[1 << 20];
int solve(int bit) {
BIT Z; Z.init((4 << bit)); int rem = 0;
for (int i = 1; i <= N; i++) {
int F = A[i] % (2 << bit);
Z.add(F, 1);
Z.add(F + (2 << bit), 1);
rem += Z.sum((4 << bit) - F - 1) - Z.sum((3 << bit) - F - 1);
rem %= 2;
}
return rem;
}
int main() {
scanf("%d", &N);
for (int i = 1; i <= N; i++) scanf("%d", &A[i]);
int ans = 0;
for (int i = 0; i <= 20; i++) {
int t = solve(i);
if (t == 1) ans += (1 << i);
}
printf("%d\n", ans);
return 0;
}
Compilation message (stderr)
# | 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... |