Advertisement
ivnikkk

Untitled

Dec 21st, 2021
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. #include <vector>
  2. #include<iostream>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <iomanip>
  6. #include <fstream>
  7. #include <string>
  8. #include <set>
  9. #include <deque>
  10. #include <queue>
  11. #include <map>
  12. #include <bitset>
  13. #include <random>
  14. #include <cassert>
  15. #include <unordered_map>
  16. #include <unordered_set>
  17. #include<math.h>
  18. using namespace std;
  19. typedef long long             ll;
  20. typedef unsigned long long     ull;
  21. typedef long double            ld;
  22. #define endl              "\n"
  23. #define all(a)            a.begin(), a.end()
  24. #define allr(a)           a.rbegin(), a.rend()
  25. #define pb                push_back
  26. #define pikachu           push_back
  27. #define F                 first
  28. #define S                  second
  29. #define mp                make_pair
  30. ll inf = 1e18;
  31.  
  32. pair<ll,ll> get_kek(ll left, ll right, vector<ll>& log, vector <vector<pair<ll,ll>>>& sparce) {
  33.     ll len = right - left + 1;
  34.     ll level = log[len];
  35.     return { min(sparce[level][left].F, sparce[level][right - (1 << level) + 1].F) ,  max(sparce[level][left].S, sparce[level][right - (1 << level) + 1].S) };
  36. }
  37. void solve() {
  38.     ll k, n;
  39.     cin >> n;
  40.     vector<ll> a(n);
  41.     for (ll i = 0; i < n; i++) {
  42.         cin >> a[i];
  43.     }
  44.     ll m;
  45.     cin >> m;
  46.     vector <vector<pair<ll,ll>>> sparce(1, vector <pair<ll,ll>>(1 + n));
  47.     for (ll i = 1; i <= n; i++) {
  48.         sparce[0][i] = { a[i - 1],a[i - 1] };
  49.     }
  50.     for (ll len = 1; len * 2 <= n; len *= 2) {
  51.         sparce.push_back(sparce.back());
  52.         for (ll i = 1; i + len <= n; i++) {
  53.             sparce.back()[i].F = min(sparce.back()[i].F, sparce.back()[i + len].F);
  54.             sparce.back()[i].S = max(sparce.back()[i].S, sparce.back()[i + len].S);
  55.         }
  56.     }
  57.     vector <ll> log(1 + n, 0);
  58.     for (ll i = 2; i <= n; i++) log[i] = log[i >> 1] + 1;
  59.     //get_kek(i + 1, i + k, log, sparce)
  60.     for (ll i = 0; i < m; i++) {
  61.         cin >> k;
  62.         ll left=0, right = 0;
  63.         ll mxans = 0;
  64.         pair<ll, ll> ans = { 0,0 };
  65.         while (right != n - 1) {
  66.             if (right - left + 1 > mxans) {
  67.                 mxans = right - left + 1;
  68.                 ans = { left,right };
  69.              }
  70.             pair<ll, ll> check = get_kek(left + 1, right + 2,log,sparce);
  71.             if (check.S - check.F <= k) {
  72.                 right++;
  73.             }
  74.             else {
  75.                 left++;
  76.             }
  77.         }
  78.         if (right - left + 1 > mxans) {
  79.             mxans = right - left + 1;
  80.             ans = { left,right };
  81.         }
  82.         cout << ans.first + 1 << ' ' << ans.second + 1 << endl;
  83.     }
  84. }
  85. signed main() {
  86.     ios_base::sync_with_stdio(false);
  87.     cin.tie(nullptr);
  88.     ll t = 1;
  89.     //cin >> t;
  90.     while (t--) {
  91.         solve();
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement