Submission #754353

#TimeUsernameProblemLanguageResultExecution timeMemory
754353gortomiGlobal Warming (CEOI18_glo)C++17
100 / 100
62 ms5380 KiB
#include <iostream> #include <vector> #include <algorithm> #include <climits> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, x; cin >> n >> x; vector<int> a(n + 1); for(int i = 1; i <= n; i++) { cin >> a[i]; } vector<int> dp(n + 2, INT_MAX); dp[0] = 0; vector<pair<int, int> > ch(n + 1); for(int i = 1; i <= n; i++) { int j = upper_bound(dp.begin(), dp.end(), a[i]) - dp.begin(); if(dp[j - 1] == a[i]) continue; dp[j] = a[i]; ch[i] = {dp[j], j}; } fill(dp.begin(), dp.end(), INT_MAX); dp[0] = -INT_MAX; int ans = 0; for(int i = n; i >= 1; i--) { if(ch[i].second != 0) { int ind = lower_bound(dp.begin(), dp.end(), -ch[i].first + x) - dp.begin() - 1; ans = max(ans, ch[i].second + ind); } auto it = upper_bound(dp.begin(), dp.end(), -a[i]); int j = it - dp.begin(); if(dp[j - 1] == -a[i]) continue; dp[j] = -a[i]; } cout << ans; 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...