Advertisement
ivnikkk

Untitled

Dec 24th, 2021
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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