fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4.  
  5. const int S = 1<<20;
  6. int n,m;
  7. int p,b;
  8.  
  9. int a[S];
  10. bool turn;
  11. int v;
  12.  
  13.  
  14. long long calc(int i, int turn)
  15. {
  16. if(i >= (1<<n))
  17. {
  18. return a[i];
  19. }
  20. if(turn)
  21. {
  22. a[i]= calc(i * 2, 0) ^ calc(i * 2 + 1, 0);
  23. }
  24. else
  25. {
  26. a[i]= calc(i * 2 , 1) | calc(i * 2 + 1, 1);
  27. }
  28. return a[i];
  29.  
  30. }
  31.  
  32. int main()
  33. {
  34. cin>>n>>m;
  35. memset(a,-1,sizeof(a));
  36. for(int i = (1<<n) ; i < (1 << (n+1)) ; i++)
  37. {
  38. cin>>a[i];
  39. }
  40.  
  41. a[1] = calc(1, (n+1) % 2);
  42.  
  43. for(int i = 0; i < m; i++)
  44. {
  45. cin>>p>>b;
  46. v = (1<<n) + p - 1;
  47. a[v] = b;
  48. turn = 0;
  49. v /= 2;
  50. while(v)
  51. {
  52. if(turn)
  53. {
  54. a[v] = a[v * 2] ^ a[v * 2 + 1];
  55. }
  56. else
  57. {
  58. a[v] = a[v * 2] | a[v * 2 + 1];
  59. }
  60. turn ^= 1;
  61. v/=2;
  62. }
  63. cout<<a[1]<<endl;
  64. }
  65. return 0;
  66.  
  67. }
Success #stdin #stdout 0s 7572KB
stdin
1 10

6 26

1 11

1 9

1 31

1 10

2 12

1 8

2 10

2 4

2 18

1 31
stdout
27
27
31
26
14
12
10
12
26
31