Advertisement
Falak_Ahmed_Shakib

segment tree

Nov 5th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 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= 2e5 + 10;
  11. #define eb emplace_back
  12. int st[400001] , ara[100001];
  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] = min(st[2*si] , st[2*si+1]);
  27. }
  28.  
  29. int query(int si , int ss , int se , int qs , int qe)
  30. {
  31. if(qe < ss || qs> se)
  32. return INT_MAX;
  33.  
  34. if(ss>=qs && se<=qe)
  35. return st[si];
  36.  
  37. int mid = (ss + se)/2;
  38. int l = query(2*si , ss , mid , qs , qe);
  39. int r = query(2*si+1 , mid+1 , se , qs , qe);
  40.  
  41. return min(l , r);
  42. }
  43. void update(ll si,ll ss,ll se,ll i,ll newv)
  44. {
  45. if(i>se || i<ss)
  46. {
  47. return ;
  48. }
  49.  
  50. if(i==ss && i==se)
  51. {
  52. st[si]=newv;
  53. return;
  54. }
  55.  
  56. ll l=si*2;
  57. ll r=l+1;
  58. ll mid=(ss+se)/2;
  59.  
  60. update(l,ss,mid,i,newv);
  61. update(r,mid+1,se,i,newv);
  62.  
  63. st[si]=st[l]+st[r];
  64.  
  65. }
  66. int main()
  67. {
  68. int n , q , l , r;
  69.  
  70. cin>>n;
  71.  
  72. for(ll i=1;i<=n;i++)
  73. cin>>ara[i];
  74.  
  75. cin>>q;
  76. build(1 , 1 , n);
  77. while(q--)
  78. {
  79. cin>>l>>r;
  80. cout<<query(1 , 1 , n , l+1 , r+1)<<endl;
  81. }
  82. }
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement