Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1e5;
  6. const int INF = 105000;
  7. int a[N];
  8. int blocksz, k;
  9. int blocks[N];
  10. int n, cnt = 0, m = INF, cur;
  11.  
  12. int num(int x) {
  13.     return x / blocksz;
  14. }
  15.  
  16. int get(int l, int r) {
  17.     int m = 0;
  18.     for (int i = l; i <= r; i++) {
  19.         if (i == blocksz * num(i) && i + blocksz < r) {
  20.             m = max(m, blocks[num(i)]);
  21.             i += blocksz - 1;
  22.         } else {
  23.             m = max(m, a[i]);
  24.         }
  25.     }
  26.     return m;
  27. }
  28.  
  29. int main() {
  30.     ios_base::sync_with_stdio(false);
  31.     cin.tie(0);
  32.     cout.tie(0);
  33.     blocksz = sqrt((double)n);
  34.     cin >> n;
  35.     for (int i = 0; i < n; i++) {
  36.         cin >> a[i];
  37.     }
  38.     cin >> k;
  39.     vector< pair <int, int> > pairs(k);
  40.     for (int i = 0; i < k; i++) {
  41.         int x, y;
  42.         cin >> x >> y;
  43.         pairs[i].first = x, pairs[i].second = y;
  44.     }
  45.     for (int i = 0; i < n; i++) {
  46.         int c = num(i);
  47.         blocks[c] = max(blocks[c], a[i]);
  48.     }
  49.     for (int i = 0; i < k; i++) {
  50.         int l = pairs[i].first - 1, r = pairs[i].second - 1;
  51.         cout << get(l, r) << ' ';
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement