Submission #1023408

#TimeUsernameProblemLanguageResultExecution timeMemory
1023408NintsiChkhaidzeXOR Sum (info1cup17_xorsum)C++17
45 / 100
459 ms49908 KiB
#include <bits/stdc++.h> #include <ostream> #define pb push_back #define s second #define f first #define pb push_back #define pii pair <int,int> #define ll long long #define left h*2,l,(l + r)/2 #define right h*2+1,(l + r)/2 + 1,r #define int ll using namespace std; const int N = 1e6 + 5,inf = 1e9; int a[N]; pii arr[N],b[N]; bool fix[N]; signed main() { ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); int n; cin>>n; for (int i = 1; i <= n; i++){ cin >> a[i]; } for (int j = 1; j <= n; j++) arr[j] = {(a[j] & ((1<<(0 + 1)) - 1)),j}; sort(arr+1,arr+n+1); int ans=0,add=0; for (int i = 0; i <= 30; i++){ int m = n; for (int j = 1; j <= n; j++){ int bb = ((a[arr[j].s] >> i) & 1); if(bb > 0) fix[j] = 1,arr[++m] = arr[j]; } int idx = 0; for (int j = 1; j <= m; j++){ if (fix[j]) continue; b[++idx] = arr[j]; } for (int j = 1; j <= n; j++){ int x = b[j].s; arr[j] = {(a[x] & ((1<<(i + 1)) - 1)),x}; fix[j] = 0; } vector <pair <pii,int> > v; for (int j = 1; j <= n; j++){ int sum = ((arr[j].f + arr[n].f) >> i) & 3; if (v.size() && v.back().s == sum) v.back().f.s += 1; else { v.pb({{j,j},sum}); } } int cnt = 0,add = 0; int r0 = 0,r1 = 0,r2 = 0; for (int j = n; j >= 1; j--){ while (r0 + 1 <= n && (((arr[j].f + arr[r0 + 1].f) >> i) & 3) <= 0) r0++; while (r1 + 1 <= n && (((arr[j].f + arr[r1 + 1].f) >> i) & 3) <= 1) r1++; while (r2 + 1 <= n && (((arr[j].f + arr[r2 + 1].f) >> i) & 3) <= 2) r2++; int l = max(j,r0 + 1),r = r1; cnt += max(0LL,r - l + 1); l = max(j,r2 + 1),r = n; cnt += max(0LL,r - l + 1); } if (cnt & 1) ans |= (1LL<<i); } cout<<ans; }

Compilation message (stderr)

xorsum.cpp: In function 'int main()':
xorsum.cpp:62:17: warning: unused variable 'add' [-Wunused-variable]
   62 |     int cnt = 0,add = 0;
      |                 ^~~
xorsum.cpp:33:13: warning: unused variable 'add' [-Wunused-variable]
   33 |   int ans=0,add=0;
      |             ^~~
#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...