Advertisement
Guest User

RMQ

a guest
Dec 11th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.66 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define endl "\n"
  4.  
  5. using namespace std;
  6.  
  7. int n;
  8.  
  9. int a[100000], lg[100000], mn[100000][100000];
  10.  
  11. int rmq(int l, int r)
  12. {
  13.     int t = lg[r-l];
  14.     return min(mn[l][t], mn[r-(1<<t)][t]);
  15. }
  16.  
  17. signed main()
  18. {
  19.     cin >> n;
  20.     for (int i=0; i<n; i++) cin >> a[i];
  21.     for (int i=0; i<int(log(n)); i++)
  22.     {
  23.         for (int j=(1<<i); j<n; j++)
  24.         {
  25.             lg[j] = i;
  26.         }
  27.     }
  28.     for (int i=n-1; i>=0; i--)
  29.     {
  30.         mn[i][0] = a[i];
  31.         for (int j=0; j<int(log(n))-1; j++)
  32.         {
  33.             mn[i][j+1] = min(mn[i][j], mn[i+(1<<j)][j]);
  34.         }
  35.     }
  36.     int m;
  37.     cin >> m;
  38.     for (int i=0; i<m; i++)
  39.     {
  40.         int l, r;
  41.         cin >> l >> r;
  42.         cout << rmq(l, r) << " ";
  43.     }
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement