Submission #1122246

#TimeUsernameProblemLanguageResultExecution timeMemory
1122246I_love_BanuXOR Sum (info1cup17_xorsum)C++17
0 / 100
999 ms131072 KiB
#include"bits/stdc++.h"
using namespace std;

using ll = long long;

const int mxN = 1000006;
const int mxBt = 40;

ll vbt[mxBt][mxN];
int cnt[mxBt];
int v[mxN];

main() {
    int N;
    cin >> N;

    for (int i = 0; i < N; i ++) {
        cin >> v[i];
    }

    for (int i = mxBt - 1; 0 <= i; i --) {
        for (int j = 0; j < N; j ++) {
            v[j] &= ~(1ll << (i + 1));
            vbt[i][j] = v[j];
        }
        sort(vbt[i], vbt[i] + N);
    }

    for (int i = 0; i < mxBt; i ++) {
        for (int j =  0; j < N; j ++) {
            ll smallLimit = (1ll << (i + 1)) - 1;
            ll smallStart = (1ll << i);
            auto smallLimitIt = upper_bound(vbt[i], vbt[i] + N, smallLimit - vbt[i][j]);
            auto smallStartIt = lower_bound(vbt[i], vbt[i] + N, smallStart - vbt[i][j]);
            cnt[i] += smallLimitIt - smallStartIt;
            ll bigLimit = (1ll << (i + 2)) - 2;
            ll bigStart = (1ll << i) + (1ll << (i + 1));
            auto bigLimitIt = upper_bound(vbt[i], vbt[i] + N, bigLimit - vbt[i][j]);
            auto bigStartIt = lower_bound(vbt[i], vbt[i] + N, bigStart - vbt[i][j]);
            cnt[i] += bigLimitIt - bigStartIt;
        }
    }

    ll ans = 0;
    for (int i = 0; i < mxBt; i ++) {
        if (cnt[i] & 1) {
            ans += (1ll << i);
        }
    }
    
    cout << ans << endl;
}

Compilation message (stderr)

xorsum.cpp:13:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   13 | main() {
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...