Guest User

Untitled

a guest
Aug 16th, 2021
778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1.  
  2. #include "bits/stdc++.h"
  3. using namespace std;
  4.  
  5. #define fast_io ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  6.  
  7. typedef long long ll;
  8. #define vi vector<ll>
  9. #define pb push_back
  10.  
  11. #define nl "\n"
  12.  
  13. #define yesno(x) cout << (((x)) ? "YES" : "NO") << nl
  14. #define cntdig(x) floor(log(x) + 1)
  15.  
  16. #define fra(i, init, n, inc) for (i = init; i < n; i += inc)
  17. #define frd(i, init, n, dec) for (i = init; i >= n; i -= dec)
  18.  
  19. bool sortbysec(pair<int, int> &a, pair<int, int> &b)
  20. {
  21.     return a.second < b.second;
  22. }
  23.  
  24. void tv(vi &a, ll n)
  25. {
  26.     ll i = 0;
  27.     fra(i, 0, n, 1)
  28.     {
  29.         ll t;
  30.         cin >> t;
  31.         a.pb(t);
  32.     }
  33. }
  34.  
  35. class segment_tree
  36. {
  37.     vector<ll> sg;
  38.     ll n;
  39.  
  40. public:
  41.     segment_tree(ll dn)
  42.     {
  43.         n = dn;
  44.         sg.resize(4 * n);
  45.     }
  46.  
  47.     void build(vector<ll> &a, ll start, ll end, ll cur_node)
  48.     {
  49.         if (start == end)
  50.         {
  51.             sg[cur_node] = a[start];
  52.             return;
  53.         }
  54.         ll mid = (start + end) / 2;
  55.         build(a, start, mid, 2 * cur_node);
  56.         build(a, mid + 1, end, 2 * cur_node + 1);
  57.         sg[cur_node] = min(sg[2 * cur_node], sg[2 * cur_node + 1]);
  58.     }
  59.  
  60.     ll query(ll start, ll end, ll cur_node, ll left, ll right)
  61.     {
  62.         if (end < left || start > right)
  63.             return LONG_MAX;
  64.  
  65.         if (start >= left && end <= right)
  66.             return sg[cur_node];
  67.  
  68.         ll mid = (start + end) / 2;
  69.         ll lres = query(start, mid, 2 * cur_node, left, right);
  70.         ll rres = query(mid + 1, end, 2 * cur_node + 1, left, right);
  71.         return min(lres, rres);
  72.     }
  73. };
  74.  
  75. void my_sol()
  76. {
  77.     ll n, q;
  78.     cin >> n >> q;
  79.     vi a;
  80.     tv(a, n);
  81.     segment_tree s(n);
  82.     s.build(a, 0, n - 1, 1);
  83.     vi ans;
  84.     for (ll i = 0; i < q; i++)
  85.     {
  86.         ll l, r;
  87.         cin >> l >> r;
  88.         ans.push_back(s.query(0, n - 1, 1, l - 1, r - 1));
  89.     }
  90.     for (auto i : ans)
  91.         cout << i << endl;
  92. }
  93.  
  94. int main()
  95. {
  96.     fast_io;
  97.  
  98.     my_sol();
  99.  
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment