Advertisement
MinhNGUYEN2k4

RMQ || find the minimum value in specified range

Aug 10th, 2020
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. typedef pair<int,int> ii;
  5. typedef vector<ii> vii;
  6. const int N = 100005;
  7.  
  8. int n,m;
  9. int a[N],f[N][18];
  10.  
  11. signed main()
  12. {
  13.     ios_base::sync_with_stdio(false);
  14.     cin.tie(0);cout.tie(0);
  15.     freopen("rmq.inp","r",stdin);
  16.     freopen("rmq.out","w",stdout);
  17.     cin >> n >> m;
  18.     for(int i=1; i<=n; ++i)
  19.     {
  20.         cin >> a[i];
  21.     }
  22.     for(int i=1; i<=n; ++i)
  23.     {
  24.         f[i][0] = a[i];
  25.     }
  26.     for(int k=1; (1 << k) <= n; ++k)
  27.         for (int i=1; i+(1<<k)-1 <=n; ++i)
  28.             f[i][k] = min(f[i][k-1],f[i+(1<<(k-1))][k-1]);
  29.     while (m--)
  30.     {
  31.         int l,r;
  32.         cin >> l >> r;
  33.         int k = log2(r-l+1);
  34.         cout << min(f[l][k],f[r-(1<<k)+1][k]) << endl;
  35.     }
  36.     return 0;
  37. }
  38.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement