Advertisement
Guest User

197D

a guest
Apr 9th, 2020
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <vector>
  5. #include <string>
  6. #include <set>
  7. #include <map>
  8. #include <stack>
  9. #include <queue>
  10. #include <deque>
  11. #include <fstream>
  12. #include <ctime>
  13. using namespace std;
  14.  
  15. #define TASK ""
  16. #define INF 1e18
  17. #define MOD 1000000007
  18.  
  19. vector < unsigned int > tree;
  20.  
  21. void build(int n) {
  22.     int now = pow(2, n) - 1;
  23.     while (now > 0) {
  24.         if ((int(log2(now)) + 1) % 2 == n % 2) {
  25.             tree[now] = tree[now * 2] | tree[now * 2 + 1];
  26.         }
  27.         else {
  28.             tree[now] = tree[now * 2] ^ tree[now * 2 + 1];
  29.         }
  30.         now--;
  31.     }
  32. }
  33.  
  34. int update(int n, int pos, int v) {
  35.     int now = pos + pow(2, n);
  36.     tree[now] = v;
  37.     now /= 2;
  38.     while (now > 0) {
  39.         if ((int(log2(now)) + 1) % 2 == n % 2) {
  40.             tree[now] = tree[now * 2] | tree[now * 2 + 1];
  41.         }
  42.         else {
  43.             tree[now] = tree[now * 2] ^ tree[now * 2 + 1];
  44.         }
  45.         now /= 2;
  46.     }
  47.     return tree[1];
  48. }
  49.  
  50. int main() {
  51.  
  52. #ifdef _DEBUG
  53.     freopen("debug.in", "r", stdin);
  54.     freopen("debug.out", "w", stdout);
  55. #else
  56.     //freopen(TASK".in", "r", stdin);
  57.     //freopen(TASK".out", "w", stdout);
  58.     //freopen("input.txt", "r", stdin);
  59.     //freopen("output.txt", "w", stdout);
  60. #endif // _DEBUG
  61.  
  62.     srand(time(0));
  63.     ios_base::sync_with_stdio(0);
  64.     cin.tie(0);
  65.     cout.tie(0);
  66.     cout.precision(9);
  67.    
  68.     int n, m, st, p, b;
  69.     cin >> n >> m;
  70.     st = pow(2, n);
  71.     tree.resize(2 * st);
  72.     for (int i = 0; i < st; i++) {
  73.         cin >> tree[st + i];
  74.     }
  75.     build(n);
  76.     for (int i = 0; i < m; i++) {
  77.         cin >> p >> b;
  78.         cout << update(n, p - 1, b) << "\n";
  79.     }
  80.  
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement