Submission #1260370

#TimeUsernameProblemLanguageResultExecution timeMemory
1260370pastaGlobal Warming (CEOI18_glo)C++20
48 / 100
42 ms1860 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, ll> pii; #define pb push_back #define all(x) x.begin(), x.end() // #define int ll #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define lc (id * 2) #define rc (lc + 1) #define F first const int inf = 1e9 + 10; const int maxn = 1e5 + 10; const int mod = 19 + 7;; int n, x, a[maxn], dp[maxn], mn[maxn], mx[maxn]; int calc_l(int i) { int l = 1, r = maxn; while (r - l > 1) { int mid = (l + r) / 2; if (mn[mid - 1] < a[i]) l = mid; else r = mid; } dp[i] = l; mn[l] = min(a[i], mn[l]); return l; } void calc_r(int i) { int l = 1, r = maxn; while (r - l > 1) { int mid = (l + r) / 2; if (mx[mid - 1] > a[i]) l = mid; else r = mid; } mx[l] = max(a[i], mx[l]); } signed main() { cin >> n >> x; for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 0; i < maxn; i++) { mn[i] = inf; mx[i] = -inf; } int ans = 0; for (int i = 1; i <= n; i++) ans = max(ans, calc_l(i)); // cout << ans << '\n'; for (int i = n; i > 1; i--) { calc_r(i); int l = 0, r = maxn; while (r - l > 1) { int mid = (l + r) / 2; if (mx[mid] > a[i - 1] - x) { l = mid; } else { r = mid; } } ans = max(ans, dp[i - 1] + l); } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...