Advertisement
Ginger_samurai

Untitled

Feb 5th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. ο»Ώ#include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. void build(vector<long long>&a, vector<long long>&t, long long v, long long tl, long long tr) {
  7.     if (tl == tr) {
  8.         t[v] = tl;
  9.         return;
  10.     }
  11.     long long tm = (tl + tr) / 2;
  12.     build(a, t, 2 * v, tl, tm);
  13.     build(a, t, 2 * v + 1, tm + 1, tr);
  14.     if (a[t[2 * v]] > a[t[2 * v + 1]]) {
  15.         t[v] = t[2 * v];
  16.     } else {
  17.         t[v] = t[2 * v + 1];
  18.     }
  19. }
  20.  
  21. long long mx(vector<long long>& a, vector<long long>& t, long long v, long long tl, long long tr, long long l, long long r) {
  22.     if (r < l) {
  23.         return a.size() - 1;
  24.     }
  25.     if (tl == l && tr == r) {
  26.         return t[v];
  27.     }
  28.     long long tm = (tl + tr) / 2;
  29.     long long fst = mx(a, t, 2 * v, tl, tm, l, min(tm, r));
  30.     long long scd = mx(a, t, 2 * v+1, tm+1, tr, max(l, tm+1), r);
  31.     if (a[fst] > a[scd]) {
  32.         return fst;
  33.     }
  34.     else {
  35.         return scd;
  36.     }
  37. }
  38.  
  39. int main() {
  40.     long long n;
  41.     cin >> n;
  42.     vector<long long> a(n+1), t(4 * n), ans;
  43.     for (long long i = 0; i < n; i++) {
  44.         cin >> a[i];
  45.     }
  46.     a[n] = 0;
  47.     build(a, t, 1, 0, n - 1);
  48.     long long k = 0;
  49.     cin >> k;
  50.     for (int i = 0; i < k; i++) {
  51.         long long l, r;
  52.         cin >> l >> r;
  53.         ans.push_back(mx(a, t, 1, 0, n - 1, l-1, r-1));
  54.     }
  55.     long long s = ans.size();
  56.    
  57.     /*for (long long i = 0; i < 4*n; i++) {
  58.         cout << t[i] << " ";
  59.     }
  60.     cout << endl;*/
  61.     for (long long i = 0; i < s; i++) {
  62.         cout << ans[i]+1 << " ";
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement