제출 #918407

#제출 시각아이디문제언어결과실행 시간메모리
918407divadXOR Sum (info1cup17_xorsum)C++14
0 / 100
1640 ms7064 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int NMAX = 1e6+2; int n,v[NMAX]; struct FenwickTree { int n; vector<int> aib; FenwickTree(int _n){ n = _n; aib.resize(n+1); } void update(int pos, int val){ for(int i = pos; i <= n; i += (i&-i)){ aib[i] += val; } } int query(int pos){ int ans = 0; for(int i = pos; i > 0; i -= (i&-i)){ ans += aib[i]; } return ans; } int query(int l, int r){ return query(r) - query(l-1); } }; int brut(int k){ int ans = 0; int mod = (1<<(k+1)); int l = (1<<k), r = (1<<(k+1))-1; for(int i = 1; i <= n; i++){ for(int j = 1; j <= i; j++){ int sum = (v[i]+v[j])%mod; int bt = (sum>>k)&1; if(bt){ assert(l <= sum && sum <= r); } ans += bt; } } return ans; } bool inauntru(int x, pii interv){ auto [l, r] = interv; return (l <= x && x <= r); } int cnt(int k){ int mod = (1<<(k+1)); int ans = 0; map<int, int> nrm; for(int i = 1; i <= n; i++){ int val = v[i]%mod; nrm[val+1] = i; int l = (1<<k), r = (1<<(k+1))-1; l = (l-val+mod)%mod; r = (r-val+mod)%mod; if(l <= r){ nrm[r+1] = nrm[l] = i; }else{ nrm[r+1] = nrm[l] = nrm[mod] = i; } } int cnt = 0; for(auto &it: nrm){ it.second = ++cnt; } FenwickTree aib(cnt); for(int i = 1; i <= n; i++){ int val = v[i]%mod; aib.update(nrm[val+1], 1); int l = (1<<k), r = (1<<(k+1))-1; l = (l-val+mod)%mod; r = (r-val+mod)%mod; if(l <= r){ ans += aib.query(nrm[r+1]) - aib.query(nrm[l]); }else{ ans += aib.query(nrm[r+1]); ans += aib.query(nrm[mod]) - aib.query(nrm[l]); } } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for(int i = 1; i <= n; i++){ cin >> v[i]; } int ans = 0; for(int i = 0; i < 20; i++){ ans += (cnt(i)&1)*(1<<i); } cout << ans; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

xorsum.cpp: In function 'bool inauntru(int, pii)':
xorsum.cpp:49:10: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   49 |     auto [l, r] = interv;
      |          ^
#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...