Adrita

ds lab 9 task 3

Jul 28th, 2020
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. int tree[2000];
  5. int ar[1000];
  6. void init(int node,int b,int e)
  7. {
  8. if(b==e)
  9. {
  10. tree[node]=ar[b];
  11. return;
  12. }
  13. int left=node*2;
  14. int right=(node*2)+1;
  15. int mid=(b+e)/2;
  16. init(left,b,mid);
  17. init(right,mid+1,e);
  18. tree[node]=tree[left]+tree[right];
  19. }
  20. int update(int node,int b,int e,int i,int newVal)
  21. {
  22. if(i>e||i<b)
  23. return 0;
  24. if(b==i&&e==i)
  25. {
  26. tree[node]=newVal;
  27. return 0;
  28. }
  29. int left=node*2;
  30. int right=(node*2)+1;
  31. int mid=(b+e)/2;
  32. update(left,b,mid,i,newVal);
  33. update(right,mid+1,e,i,newVal);
  34. tree[node]=tree[left]+tree[right];
  35. }
  36. int query_sum(int node,int b,int e,int i,int j)
  37. {
  38. if(i>e||j<b)
  39. return 0;
  40. if(b>=i&&e<=j)
  41. return tree[node];
  42. int left=node*2;
  43. int right=(node*2)+1;
  44. int mid=(b+e)/2;
  45. int p1=query_sum(left,b,mid,i,j);
  46. int p2=query_sum(right,mid+1,e,i,j);
  47. return p1+p2;
  48. }
  49. int main()
  50. {
  51. int k,n,Q,i,j,t,v;
  52. cin>>n>>Q;
  53. for(k=1; k<=n; k++)
  54. cin>>ar[k];
  55. init(1,1,n);
  56. while(Q--)
  57. {
  58. cin>>t;
  59. if(t==1)
  60. {
  61. cin>>i;
  62. cout<<ar[i+1]<<endl;
  63. update(1,1,n,i+1,0);
  64. }
  65. else if(t==2)
  66. {
  67. cin>>i>>v;
  68. int exist=ar[i+1];
  69. update(1,1,n,i+1,exist+v);
  70. }
  71. else
  72. {
  73. cin>>i>>j;
  74. cout<<query_sum(1,1,n,i+1,j+1)<<endl;
  75. }
  76. }
  77. }
  78.  
  79.  
Advertisement
Add Comment
Please, Sign In to add comment