fork download
  1. #include<iostream>
  2. #include<math.h>
  3. using namespace std;
  4.  
  5. void build(int arr[], int s, int e, int tree[], int index){
  6. if(s==e){
  7. tree[index] = arr[s];
  8. return;
  9. }
  10. int mid = (s+e)/2;
  11. build(arr,s,mid,tree,2*index);
  12. build(arr,mid+1,e,tree,2*index+1);
  13.  
  14. int times = log2(e-s+1);
  15. if(times&1){
  16. tree[index] = (tree[2*index] | tree[2*index+1]);
  17. }
  18. else{
  19. tree[index] = (tree[2*index] ^ tree[2*index+1]);
  20. }
  21. }
  22. void update(int tree[], int ss, int se, int i ,int inc,int index){
  23. if(i<ss || i>se){
  24. return;
  25. }
  26. if(i>ss && i<se ){
  27. tree[index] = inc;
  28. }
  29. int mid = (ss+se)/2;
  30. update(tree,ss,mid,i,inc,2*index);
  31. update(tree,ss,mid,i,inc,2*index);
  32.  
  33. int times = log2(se-ss+1);
  34. if(times&1){
  35. tree[index] = (tree[2*index] | tree[2*index+1]);
  36. }
  37. else{
  38. tree[index] = (tree[2*index] ^ tree[2*index+1]);
  39. }
  40. }
  41. int main(){
  42. int n,q;
  43. cin>>n>>q;
  44. n = pow(2,n);
  45. int arr[n];
  46. for(int i=0;i<n;i++){
  47. cin>>arr[i];
  48. }
  49. int *tree = new int[4*n+1];
  50. build(arr,0,n-1,tree,1);
  51. while(q--){
  52. int i, inc;
  53. cin>>i>>inc;
  54. i--;
  55. update(tree,0,n-1,i,inc,1);
  56. cout<<tree[1]<<endl;
  57. }
  58. return 0;}
Internal error #stdin #stdout 0s 4400KB
stdin
2 4
1 6 3 5
1 4
3 4
1 2
1 2
stdout
Standard output is empty