Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include<iostream>
- #include <algorithm>
- #include <cmath>
- #include <iomanip>
- #include <fstream>
- #include <string>
- #include <set>
- #include <deque>
- #include <queue>
- #include <map>
- #include <bitset>
- #include <random>
- #include <cassert>
- #include <unordered_map>
- #include <unordered_set>
- #include<math.h>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- #define endl "\n"
- #define all(a) a.begin(), a.end()
- #define allr(a) a.rbegin(), a.rend()
- #define pb push_back
- #define pikachu push_back
- #define F first
- #define S second
- #define mp make_pair
- ll inf = 1e18;
- pair<ll,ll> get_kek(ll left, ll right, vector<ll>& log, vector <vector<pair<ll,ll>>>& sparce) {
- ll len = right - left + 1;
- ll level = log[len];
- 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) };
- }
- void solve() {
- ll k, n;
- cin >> n;
- vector<ll> a(n);
- for (ll i = 0; i < n; i++) {
- cin >> a[i];
- }
- ll m;
- cin >> m;
- vector <vector<pair<ll,ll>>> sparce(1, vector <pair<ll,ll>>(1 + n));
- for (ll i = 1; i <= n; i++) {
- sparce[0][i] = { a[i - 1],a[i - 1] };
- }
- for (ll len = 1; len * 2 <= n; len *= 2) {
- sparce.push_back(sparce.back());
- for (ll i = 1; i + len <= n; i++) {
- sparce.back()[i].F = min(sparce.back()[i].F, sparce.back()[i + len].F);
- sparce.back()[i].S = max(sparce.back()[i].S, sparce.back()[i + len].S);
- }
- }
- vector <ll> log(1 + n, 0);
- for (ll i = 2; i <= n; i++) log[i] = log[i >> 1] + 1;
- //get_kek(i + 1, i + k, log, sparce)
- for (ll i = 0; i < m; i++) {
- cin >> k;
- ll left=0, right = 0;
- ll mxans = 0;
- pair<ll, ll> ans = { 0,0 };
- while (right != n - 1) {
- if (right - left + 1 > mxans) {
- mxans = right - left + 1;
- ans = { left,right };
- }
- pair<ll, ll> check = get_kek(left + 1, right + 2,log,sparce);
- if (check.S - check.F <= k) {
- right++;
- }
- else {
- left++;
- }
- }
- if (right - left + 1 > mxans) {
- mxans = right - left + 1;
- ans = { left,right };
- }
- cout << ans.first + 1 << ' ' << ans.second + 1 << endl;
- }
- }
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- ll t = 1;
- //cin >> t;
- while (t--) {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement