Submission #483348

#TimeUsernameProblemLanguageResultExecution timeMemory
483348BERNARB01Global Warming (CEOI18_glo)C++17
27 / 100
52 ms6572 KiB
#include <bits/stdc++.h> using namespace std; const int N = (int) 3e5 + 9; const long long inf = (long long) 1e18L; long long n, x, a[N], dp[N], pd[N]; pair<long long, long long> suffix_lds_info[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> x; for (int i = 0; i < n; i++) { cin >> a[i]; } int ans = 1; fill(dp, dp + n, inf); for (int i = n - 1; i >= 0; i--) { int j = lower_bound(dp, dp + n, -a[i]) - dp; dp[j] = -a[i]; ans = max(ans, j + 1); suffix_lds_info[i] = {ans, -dp[ans - 1]}; } fill(dp, dp + n, inf); int ans2 = 0; for (int i = 0; i < n; i++) { a[i] -= x; int j = lower_bound(dp, dp + n, a[i]) - dp; dp[j] = a[i]; ans2 = max(ans2, j); if (suffix_lds_info[i].second != a[i] + x || j < ans2) { int ns = suffix_lds_info[i].second; int sl = suffix_lds_info[i].first; j = lower_bound(dp, dp + n, ns) - dp; j -= 1; ans = max(ans, j + 1 + sl); } if (i + 1 < n) { int ns = suffix_lds_info[i + 1].second; int sl = suffix_lds_info[i + 1].first; j = lower_bound(dp, dp + n, ns) - dp; j -= 1; ans = max(ans, j + 1 + sl); } } cout << ans << '\n'; return 0; }
#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...