Advertisement
AlexGo11

Untitled

Jan 29th, 2020
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct block {
  4.     int mx = -1;
  5.     vector <int> nums;
  6. };
  7.  
  8. int s = 320;
  9. vector<block> dc(320);
  10.  
  11. int get_max(int l, int r) {
  12.     int ans = -1;
  13.     while (l < r) {
  14.         if (l % s || l + s - 1 >= r) {
  15.             ans = max(ans, dc[l / s].nums[l % s]);
  16.             l++;
  17.         } else {
  18.             ans = max(ans, dc[l / s].mx);
  19.             l += s;
  20.         }
  21.     }
  22.     return ans;
  23. }
  24.  
  25. int main() {
  26.     int n;
  27.     cin >> n;
  28.     vector <int> v(n);
  29.     for (int i = 0; i < n; i++) cin >> v[i];
  30.     for (int i = 0; i < n; i++) {
  31.         dc[i / s].nums.push_back(v[i]);
  32.         dc[i / s].mx = max(dc[i / s].mx, v[i]);
  33.     }
  34.     int k;
  35.     cin >> k;
  36.     for (int i = 0; i < k; i++) {
  37.         int l, r;
  38.         cin >> l >> r;
  39.         l--;
  40.         cout << get_max(l, r) << " ";
  41.     }
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement