제출 #1219496

#제출 시각아이디문제언어결과실행 시간메모리
1219496khomeXORanges (eJOI19_xoranges)C++20
55 / 100
1097 ms58180 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; const int NEU = 0; int rec(int l, int r, vector<vector<int>> &v){ int ans = 0; for (int j = 0; j < 32; j++){ int cur = 0; for (int i = l; i <= r; i++){ cur += v[i][31-j]; cur%=2; } ans += cur * (1<<j); } return ans; } void add(vector<vector<int>> &v, int id, int x){ for (int i = 0; i <= 31; i++){ v[id][31-i] = min(1ll, x & (1<<i)); } return; } void solve(){ int n, q; cin >> n >> q; vector<vector<int>> toq((n+1)/2, vector<int>(32)); vector<vector<int>> juft(n/2, vector<int>(32)); for (int i = 0 ; i < n; i++) { int x; cin >> x; if (i%2==0) add(toq, i/2, x); if (i%2==1) add(juft, i/2, x); } for (int i = 0; i < q; i++) { int p, l, r; cin >> p >> l >> r; if (p == 1) { if (l%2 == 1) { add(toq, (l-1)/2, r); // for (int j : toq[(l-1)/2]) cout << j;cout << endl; } else add(juft, (l-1)/2, r); } else { if ((r-l+1) % 2 == 0) cout << 0 << endl; else{ if (l%2 == 1) { cout << rec((l-1)/2, (r-1)/2, toq); } if (l%2 == 0) { cout << rec((l-1)/2, (r-1)/2, juft); } } cout << endl; } } // cout << (5^5) << endl; // for (auto i : toq){ // for (int j : i) cout << j;cout << endl; // }cout << endl; // for (auto i : juft){ // for (int j : i) cout << j; cout << endl; // }cout << endl; } signed main(){ ios::sync_with_stdio(0); cin.tie(0); int t = 1; // cin >> t; while(t--)solve(); }
#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...