Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4.  
  5. #define MAXN 100000
  6. #define MAXLOGN 18
  7.  
  8. int high_bit(int v){
  9.     for(int i = MAXLOGN; i >= 0; i--)
  10.         if(v & (1 << i))return i;
  11.     return 0;
  12. }
  13.  
  14. struct sparse_table{
  15.     int maxVal[MAXN][MAXLOGN];
  16.  
  17.     void init(int *val, int n){
  18.         for(int i = 0; i < n; i++){
  19.             maxVal[i][0] = val[i];
  20.         }
  21.         for(int i = n-1; i >= 0; i--){
  22.             for(int j = 1; (j < MAXLOGN) and (i + (1 << j)) < n; j++){
  23.                 maxVal[i][j] = max(
  24.                     maxVal[i][j - 1],
  25.                     maxVal[i + (1 << (j - 1))][j - 1]
  26.                 );
  27.             }
  28.         }
  29.     }
  30.  
  31.     //(), 0-base
  32.     int query(int l, int r){
  33.         int hb = high_bit(r - l + 1);
  34.         return max(maxVal[l][hb], maxVal[r - (1 << hb) + 1][hb]);
  35.     }
  36. };
  37.  
  38. int main(){
  39.     int n, m;
  40.     cin >> n >> m;
  41.     int val[n];
  42.     for(int i = 0; i < n; i++){
  43.         cin >> val[i];
  44.     }
  45.     sparse_table st;
  46.     st.init(val, n);
  47.     int l, r;
  48.     for(int i = 0; i < m; i++){
  49.         cin >> l >> r;
  50.         cout << st.query(l-1, r-1) << '\n';
  51.     }
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement