Submission #981718

#TimeUsernameProblemLanguageResultExecution timeMemory
981718NomioXORanges (eJOI19_xoranges)C++17
30 / 100
145 ms53416 KiB
#include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, q; cin >> n >> q; int a[n + 1], b[501][501] {}, c[n + 1][32] {}, d[n + 1][32] {}; for(int i = 1; i <= n; i++) { cin >> a[i]; int x = a[i], y = 31; while(x > 0) { c[i][y] = x % 2; x /= 2; y--; } } for(int i = 1; i <= n; i++) { for(int j = 0; j < 32; j++) { d[i][j] = d[i - 1][j] + c[i][j]; } } if(n <= 500) { for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { for(int k = i; k <= min(i + j - 1, n); k++) { b[i][j] = (b[i][j] ^ a[k]); } } } } if(n <= 100) { while(q--) { int t, l, r; cin >> t >> l >> r; if(t == 1) { a[l] = r; } else { int S = a[l]; for(int i = l + 1; i <= r; i++) { S = (S ^ a[i]); } for(int i = 2; i <= r - l + 1; i++) { for(int j = l; j <= r - i + 1; j++) { int A = 0; for(int k = j; k <= j + i - 1; k++) { A = (A ^ a[k]); } S = (S ^ A); } } cout << S << '\n'; } } } else if(n <= 500) { while(q--) { int t, l, r; cin >> t >> l >> r; int S = 0; for(int i = 1; i <= r - l + 1; i++) { for(int j = l; j <= r - i + 1; j++) { S = (S ^ b[j][i]); } } cout << S << '\n'; } } else { while(q--) { int t, l, r; cin >> t >> l >> r; int A[32] {}; int x = r - l + 1; for(int i = 0; i < 32; i++) { A[i] = (x * (d[r][i] - d[l - 1][i])) % 2; } for(int i = 0; i < 32; i++) { A[i] += (((r - l) * 2 - x) * (d[r - 1][i] - d[l][i])); A[i] %= 2; } int S = 0; for(int i = 0; i < 32; i++) { S += A[i] * (1 << (31 - i)); } cout << S << '\n'; } } 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...