Advertisement
codecstasy

Segment_tree_min_query

Nov 20th, 2021
684
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 1000000005
  3. using namespace std;
  4.  
  5. int ar[1000];
  6. unordered_map <int,int> st; // <index, value>
  7.  
  8. int query(int seg_ind, int ar_beg, int ar_end, int q_beg, int q_end) {
  9.     if(q_beg >= ar_beg && q_end <= ar_end) {
  10.         return st[seg_ind];
  11.     }
  12.     if(q_beg > ar_end || q_end < ar_beg) {
  13.         return INF;
  14.     }
  15.     int mid = (ar_beg + ar_end) / 2;
  16.     int l = query(2 * seg_ind, ar_beg, mid, q_beg, q_end);
  17.     int r = query(2 * seg_ind+1, mid+1, ar_end, q_beg, q_end);
  18.  
  19.     return min(l,r);
  20. }
  21.  
  22. void build_tree(int seg_ind, int ar_beg, int ar_end) {
  23.     if(ar_beg == ar_end) {
  24.         st[seg_ind] = ar[ar_beg];
  25.     }
  26.     int mid = (ar_beg + ar_end) / 2;
  27.     build_tree(2 * seg_ind, ar_beg, mid);
  28.     build_tree(2 * seg_ind+1, mid+1, ar_end);
  29.  
  30.     st[seg_ind] = min(st[2 * seg_ind], st[2 * seg_ind + 1]);
  31. }
  32.  
  33. int main() {
  34.     int n;
  35.     cin >> n;
  36.     for(int i=1 ; i<=n ; i++)
  37.         cin >> ar[i];
  38.     //for(int i=1 ; i<=n ; i++) cout << ar[i] << " ";
  39.     build_tree(1,1,n);
  40.     for(auto it: st) cout << (it).first << " -> " << (it).second << endl;
  41.     cout << query(1,1,n,1,n);
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement