Jeremiah_

RMQ

Sep 27th, 2019
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1.     #include <bits/stdc++.h>
  2.  
  3.     #define endl '\n'
  4.     #define INF 0x3f3f3f3f
  5.     #define MAXN 100500
  6.  
  7.     using namespace std;
  8.  
  9.     int arr[MAXN];
  10.     int dp[MAXN][17];
  11.  
  12.     int lg2(int n) {
  13.         int i = 0;
  14.         while (n > 1) {
  15.             n /= 2;
  16.             i++;
  17.         }
  18.         return i;
  19.     }
  20.  
  21.  
  22.     void process(int n) {
  23.         for (int i = 0; i < n; i++) {
  24.             dp[i][0] = arr[i];
  25.         }
  26.         int k = log(MAXN)+1;
  27.         for (int j = 1; j < k; j++) {
  28.             for (int i = 0; i+(1 << j) <= n; i++) {
  29.                 dp[i][j] = min(dp[i][j-1], dp[i + (1 << (j-1))][j-1]);
  30.             }
  31.         }
  32.     }
  33.  
  34.     int query(int i, int j) {
  35.         int lg = log(j - i + 1);
  36.         return min(dp[i][lg], dp[j - (1 << lg) + 1][lg]);
  37.     }
  38.  
  39.  
  40.     int main(){
  41.         int n, q;
  42.         cin >> n;
  43.         for (int i = 0; i < n; i++){
  44.             cin >> arr[i];
  45.         }
  46.         process(n);
  47.         cin >> q;
  48.         int i, j;
  49.         while (q--) {
  50.             cin >> i >> j;
  51.             cout << query(i, j) << endl;
  52.         }
  53.  
  54.         return 0;
  55.     }
Advertisement
Add Comment
Please, Sign In to add comment