Submission #422590

#TimeUsernameProblemLanguageResultExecution timeMemory
422590snasibov05Global Warming (CEOI18_glo)C++14
15 / 100
145 ms2640 KiB
#include <iostream> #include <vector> using namespace std; #define oo 1000000000 int main() { int n, x; cin >> n >> x; vector<int> v(n); for (int i = 0; i < n; ++i) { cin >> v[i]; } int sz = 1; vector<int> dp(n); vector<int> c(n+1, oo); c[0] = 0; c[1] = v[0]; dp[0] = 1; for (int i = 1; i < n; ++i) { if (v[i] < c[1]) c[1] = v[i], dp[i] = 1; else if (v[i] > c[sz]) c[sz+1] = v[i], dp[i] = ++sz; else { int k = lower_bound(c.begin(), c.end(), v[i]) - c.begin(); c[k] = v[i]; dp[i] = k; } } int ans = dp[n-1]; c.assign(0, n+1); c[0] = oo; c[1] = v[n-1] + x; dp[n-1] = 1; sz = 1; for (int i = n-2; i >= 0; --i){ if (v[i] > c[1]) ans = max(ans, dp[i]); else if (v[i] < c[sz]) ans = max(ans, dp[i] + sz); else{ int k = lower_bound(c.rbegin(), c.rend(), v[i]) - c.rbegin(); ans = max(ans, dp[i] + k - 1); } if (v[i] + x > c[1]) c[1] = v[i] + x; else if (v[i] + x < c[sz]) c[sz+1] = v[i] + x, sz++; else{ int k = lower_bound(c.rbegin(), c.rend(), v[i] + x) - c.rbegin(); c[k] = v[i] + x; } } 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...