Josif_tepe

Untitled

Oct 5th, 2025
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. using namespace std;
  4. const int maxn = 200005;
  5. const int INF = 2e9;
  6. int n, a[maxn];
  7.  
  8. int segment_tree[3 * maxn];
  9.  
  10. int merge_nodes(int A, int B) {
  11.     return min(A, B);
  12. }
  13.  
  14. void build_tree(int L = 0, int R = n - 1, int node = 1) {
  15.     if(L == R) {
  16.         segment_tree[node] = a[L];
  17.     }
  18.     else {
  19.         int middle = (L + R) / 2;
  20.         build_tree(L, middle, 2 * node);
  21.         build_tree(middle + 1, R, 2 * node + 1);
  22.         segment_tree[node] = merge_nodes(segment_tree[2 * node], segment_tree[2 * node + 1]);
  23.     }
  24. }
  25.  
  26. int query(int i, int j, int L = 0, int R = n - 1, int node = 1) {
  27.     if(R < i or j < L) {
  28.         return INF;
  29.     }
  30.     if(i <= L and R <= j) {
  31.         return segment_tree[node];
  32.     }
  33.    
  34.     int middle = (L + R) / 2;
  35.     int left_side = query(i, j, L, middle, 2 * node);
  36.     int right_side = query(i, j, middle + 1, R, 2 * node + 1);
  37.    
  38.     return merge_nodes(left_side, right_side);
  39. }
  40. int main() {
  41.     ios_base::sync_with_stdio(false);
  42.     int q;
  43.    
  44.     cin >> n >> q;
  45.    
  46.     for(int i = 0; i < n; i++) {
  47.         cin >> a[i];
  48.     }
  49.     build_tree();
  50.    
  51.     for(int i = 0; i < q; i++) {
  52.         int a, b;
  53.         cin >> a >> b;
  54.        
  55.         a--; b--;
  56.        
  57.         cout << query(a, b) << endl;
  58.     }
  59.    
  60.  
  61.        
  62.     return 0;
  63. }
  64.  
Advertisement
Add Comment
Please, Sign In to add comment