fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4.  
  5. int n;
  6. ll big=4*(1<<30);
  7. vector<int> t(big);
  8.  
  9. void build(int a[],int v,int tl,int tr,int sw)
  10. {
  11. if(tl==tr)
  12. t[v]=a[tl];
  13. else
  14. {
  15. int tm=(tl+tr)/2;
  16. build(a,2*v,tl,tm,-1*sw);
  17. build(a,2*v+1,tm+1,tr,-1*sw);
  18.  
  19. if(n%2==0 && sw==1)
  20. t[v]=(t[2*v]|t[2*v+1]);
  21. else if(n%2==0 && sw==-1)
  22. t[v]=(t[2*v]^t[2*v+1]);
  23.  
  24. if(n%2!=0 && sw==1)
  25. t[v]=(t[2*v]^t[2*v+1]);
  26. else if(n%2!=0 && sw==-1)
  27. t[v]=(t[2*v]|t[2*v+1]);
  28. }
  29. }
  30. void update(int v,int tl,int tr,int pos,int b,int sw)
  31. {
  32. if(tl==tr)
  33. t[v]=b;
  34. else
  35. {
  36. int tm=(tl+tr)/2;
  37. if(pos<=tm)
  38. {
  39. update(2*v,tl,tm,pos,b,-1*sw);
  40. }
  41. else
  42. {
  43. update(2*v+1,tl,tm,pos,b,-1*sw);
  44. }
  45.  
  46. if(n%2==0 && sw==1)
  47. t[v]=(t[2*v]|t[2*v+1]);
  48. else if(n%2==0 && sw==-1)
  49. t[v]=(t[2*v]^t[2*v+1]);
  50.  
  51. if(n%2!=0 && sw==1)
  52. t[v]=(t[2*v]^t[2*v+1]);
  53. else if(n%2!=0 && sw==-1)
  54. t[v]=(t[2*v]|t[2*v+1]);
  55. }
  56. }
  57. int main()
  58. {
  59. int m,s,p,b;
  60. cin>>s>>m;
  61. n=1<<s;
  62.  
  63. int a[n];
  64. for(int i=0;i<n;++i)
  65. cin>>a[i];
  66. int x=1;
  67. build(a,1,0,n-1,x);
  68. while(m--)
  69. {
  70. cin>>p>>b;
  71. update(1,0,n-1,p,b,x);
  72. cout<<t[1]<<"\n";
  73. }
  74. }
Runtime error #stdin #stdout 0s 4396KB
stdin
Standard input is empty
stdout
Standard output is empty