nrk009

segmenttreesir

Jul 29th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. /*i am not gonna
  2. lose this time*/
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. #define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
  6. #define ll long long
  7. #define mp make_pair
  8. #define pb push_back
  9. #define st(x) x.begin(),x.end()
  10. #define sz(x) (int)(x).size()
  11. const int  N = 1 << 20 ;
  12. int a[N] ;
  13. int seg_tree[N] ;
  14. void build(ll first , ll last , ll node  ) {
  15.     if(first == last ) {
  16.         seg_tree[node] = a[first] ;
  17.         return ;
  18.     }
  19.     ll mid = (first + last ) / 2 ;
  20.     build(first , mid , 2 * node) ;
  21.     build(mid + 1 , last , 2 * node + 1) ;
  22.     seg_tree[node] = min (seg_tree[2 * node] ,  seg_tree[2 * node + 1 ] ) ;
  23.     }
  24. ll query(ll left , ll  right , ll first, ll last , ll node) {
  25.     if(last < left || right < first)
  26.         return 1e18;
  27.  
  28.     if(left <= first and right >= last) {
  29.         return seg_tree[node] ;
  30.     }
  31.     ll mid  = (first + last)  >> 1 ;
  32.     ll p1 = query(left ,right , first , mid , 2 * node ) ;
  33.     ll p2 = query(left , right , mid + 1 , last, 2 * node  + 1 ) ;
  34.     return min(p1 , p2) ;
  35.  
  36. }
  37. void update(ll first , ll last , ll node , ll pos , ll val  ) {
  38.     if(first == last and first == pos) {
  39.         seg_tree[node] = val;
  40.         return ;
  41.     }
  42.     if(last < pos || first > pos )
  43.         return ;
  44.     ll mid = (first + last ) / 2 ;
  45.     update(first , mid , 2 * node , pos ,val ) ;
  46.     update(mid + 1 , last , 2 * node + 1 ,pos , val ) ;
  47.     seg_tree[node] = min (seg_tree[2 * node] ,  seg_tree[2 * node + 1 ] )  ;
  48.     }
  49. int main()
  50. {
  51.     int n ;
  52.     cin >> n ;
  53.     for(int i = 1 ;i <= n ;i++) {
  54.         cin >> a[i] ;
  55.     }
  56.     build(1 , n , 1) ;
  57.     int q ;
  58.     cin >> q ;
  59.     while(q--) {
  60.         int x , y ,z  ;
  61.         cin >> z ;
  62.         if(z == 1) {
  63.  
  64.         cin >> x >> y ;
  65.         cout << query(x , y , 1 , n , 1) ;
  66.         }
  67.         else {
  68.             int pos , val ;
  69.             cin >> pos >> val ;
  70.             update(1 , n , 1 , pos , val ) ;
  71.         }
  72.  
  73.  
  74.  
  75.     return 0;
  76. }
Add Comment
Please, Sign In to add comment