제출 #1314156

#제출 시각아이디문제언어결과실행 시간메모리
1314156andrei_nXOR Sum (info1cup17_xorsum)C++20
100 / 100
496 ms6288 KiB
#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 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...