Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int logN = 17;
- int sm[1 << (logN + 1)];
- int main(){
- int ex, Q;
- scanf("%d%d", &ex, &Q);
- for(int i = (1 << ex); i < (1 << (ex + 1)); ++i){
- scanf("%d", &sm[i]);
- }
- bool doOr = true;
- for(int e = ex - 1; e >= 0; --e){
- for(int i = (1 << e); i < (1 << (e + 1)); ++i){
- if(doOr){
- sm[i] = sm[i << 1] | sm[(i << 1) | 1];
- } else {
- sm[i] = sm[i << 1] ^ sm[(i << 1) | 1];
- }
- }
- doOr = !doOr;
- }
- while(Q--){
- int idx, x;
- scanf("%d%d", &idx, &x);
- idx += (1 << ex) - 1;
- sm[idx] = x;
- doOr = true;
- for(int i = idx >> 1; i >= 1; i >>= 1){
- if(doOr){
- sm[i] = sm[i << 1] | sm[(i << 1) | 1];
- } else {
- sm[i] = sm[i << 1] ^ sm[(i << 1) | 1];
- }
- doOr = !doOr;
- }
- cout << sm[1] << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement