Advertisement
willy108

XJOI_1399_1.cpp

Jun 1st, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <cmath>
  7. #include <cassert>
  8. #include <algorithm>
  9. #include <vector>
  10. #include <string>
  11. #include <map>
  12. #include <set>
  13. #include <sstream>
  14. #include <list>
  15. #include <unordered_map>
  16. #include <unordered_set>
  17. #include <functional>
  18.  
  19. #define max_v 55000
  20. #define int_max 0x3f3f3f3f
  21. #define cont continue
  22. #define byte_max 0x3f
  23. #define pow_2(n) (1 << (n))
  24.  
  25. using namespace std;
  26.  
  27. void setIO(const string& file_name){
  28.     freopen((file_name+".in").c_str(), "r", stdin);
  29.     freopen((file_name+".out").c_str(), "w+", stdout);
  30. }
  31.  
  32. int d[max_v  *2][20], t[max_v * 2][20];
  33.  
  34. class sparse_table{
  35.  
  36.   public:
  37.     sparse_table(int n, int* arr){
  38.       memset(t, byte_max, sizeof(t));
  39.       for(int i = 0; i<n; i++){
  40.         t[i][0] = arr[i];
  41.         d[i][0] = arr[i];
  42.       }
  43.      
  44.       for(int j = 1; j<=16; j++){
  45.         for(int i = 0; i<n; i++){
  46.            d[i][j] = max(d[i][j - 1], d[i + pow_2(j - 1)][j - 1]);
  47.            t[i][j] = min(t[i][j - 1], t[i + pow_2(j - 1)][j - 1]);
  48.         }
  49.       }
  50.  
  51.     }
  52.  
  53.     int query_max(int l, int r){
  54.       int k = log2(r - l);
  55.       return max(d[l][k], d[r - pow_2(k)][k]);
  56.     }
  57.  
  58.     int query_min(int l, int r){
  59.       int k = log2(r - l);
  60.       return min(t[l][k], t[r - pow_2(k)][k]);
  61.     }
  62.  
  63. };
  64.  
  65. int arr[max_v];
  66.  
  67.  
  68. int main(){
  69.     int n, q;
  70.   scanf("%d%d", &n, &q);
  71.  
  72.   for(int i = 0; i<n; i++){
  73.     scanf("%d", &arr[i]);
  74.   }
  75.  
  76.   sparse_table s(n, arr);
  77.  
  78.   while(q--){
  79.     int l, r;
  80.     scanf("%d%d", &l, &r);
  81.     l--;
  82.     int p = s.query_min(l, r);
  83.     int q = s.query_max(l, r);
  84.     printf("%d\n", q - p);
  85.   }
  86.  
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement