fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4.  
  5. int sgt[200005];
  6. void build(int n){
  7. //size is 2*n so we have filled from n to 2n-1
  8. for(int i=n-1;i>=1;i--){
  9. //if i is parent then it's left child is 2*i and it's right child is 2*i+1
  10. sgt[i]=sgt[2*i]+sgt[2*i+1];
  11. }
  12. }
  13. int query(int l, int r, int n)
  14. {
  15. l+=n;
  16. r+=n;
  17. int sum=0;
  18. while(l<=r)
  19. {
  20. if(l&1)
  21. {
  22. sum=sum+sgt[l];
  23. l++;
  24. }
  25. if(!(r&1))
  26. {
  27. sum=sum+sgt[r];
  28. r--;
  29. }
  30. l=l>>1;//l=l/2;
  31. r=r>>1;//r=r/2;
  32. }
  33. return sum;
  34. }
  35.  
  36. void update(int in, int n,int value)
  37. {
  38. in+=n;
  39. sgt[in]=value;
  40. //for root in=1
  41. while(in>1)
  42. {
  43. in=in>>1;//in=in/2;
  44. //in=1
  45. sgt[in] = sgt[in*2]+sgt[in*2+1];
  46. }
  47. return;
  48. }
  49. int32_t main() {
  50. ios_base::sync_with_stdio(0);
  51. cin.tie(0);
  52.  
  53. int n,q;
  54. cin>>n>>q;
  55. int arr[n];
  56. for(int i=0;i<n;i++)
  57. {
  58. cin>>arr[i];
  59. sgt[n+i]=arr[i];
  60. }
  61.  
  62. build(n);
  63.  
  64. while(q--){
  65. int type;
  66. cin>>type;
  67.  
  68. if(type==0){
  69. int l,r;
  70. cin>>l>>r;
  71. cout<<query(l,r,n)<<"\n";
  72. }
  73. else{
  74. int in,val;
  75. cin>>in>>val;
  76. update(in,n,val);
  77. }
  78.  
  79. }
  80. return 0;
  81. }
  82.  
Success #stdin #stdout 0s 4536KB
stdin
5 1
2 1 3 4 2
0
1 3
stdout
8