Advertisement
Falak_Ahmed_Shakib

segment tree 1

Nov 6th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<ll,ll> pll;
  5. #define fastread() (ios_base:: sync_with_stdio(false),cin.tie(NULL))
  6. #define fi first
  7. #define se second
  8. #define pb push_back
  9. ll const MOD=1000000007;
  10. const int M= 1e5 +10;
  11. #define eb emplace_back
  12. int st[4*M] ,lazy[4*M] ,ara[M];
  13.  
  14. void build(int si , int ss , int se)
  15. {
  16. if(ss == se)
  17. {
  18. st[si] = ara[ss];
  19. return;
  20. }
  21.  
  22. int mid = (ss + se)/2;
  23. build(2*si , ss , mid);
  24. build(2*si+1 , mid+1 , se);
  25.  
  26. st[si] = st[2*si] + st[2*si+1];
  27. }
  28.  
  29. int query(int si , int ss , int se , int qs , int qe)
  30. {
  31.  
  32.  
  33. if(qe < ss || qs> se)
  34. return 0;
  35.  
  36. if(ss>=qs && se<=qe)
  37. return st[si];
  38.  
  39. int mid = (ss + se)/2;
  40. int l = query(2*si , ss , mid , qs , qe);
  41. int r = query(2*si+1 , mid+1 , se , qs , qe);
  42.  
  43. return l + r;
  44. }
  45. void update(ll si,ll ss,ll se,ll i,ll newv)
  46. {
  47. if(i>se || i<ss)
  48. {
  49. return ;
  50. }
  51.  
  52. if(i==ss && i==se)
  53. {
  54. st[si]=newv;
  55. return;
  56. }
  57.  
  58. ll l=si*2;
  59. ll r=l+1;
  60. ll mid=(ss+se)/2;
  61.  
  62. update(l,ss,mid,i,newv);
  63. update(r,mid+1,se,i,newv);
  64.  
  65. st[si]=st[l]+st[r];
  66.  
  67. }
  68. int main()
  69. {
  70. int n , q , l , r;
  71.  
  72. cin>>n;
  73.  
  74. for(ll i=1;i<=n;i++)
  75. cin>>ara[i];
  76.  
  77. cin>>q;
  78. build(1 , 1 , n);
  79. while(q--)
  80. {
  81. cin>>l>>r;
  82. cout<<query(1 , 1 , n , l+1 , r+1)<<endl;
  83. }
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement