Submission #471138

#TimeUsernameProblemLanguageResultExecution timeMemory
471138zxcvbnmGlobal Warming (CEOI18_glo)C++14
62 / 100
105 ms11404 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int ll void get(vector<int>& suff, vector<int>& suff_len, vector<int> a) { reverse(a.begin(), a.end()); set<int> s; for(int i = 0; i < (int) a.size(); i++) { auto it = s.upper_bound(a[i]); if (it == s.begin()) { s.insert(a[i]); } else { it--; if (*it < a[i]) { s.erase(it); s.insert(a[i]); } } suff.push_back(*s.begin()); suff_len.push_back(s.size()); // for(int j : suff) { // cout << j << " "; // } cout << "\n"; } reverse(suff.begin(), suff.end()); reverse(suff_len.begin(), suff_len.end()); } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, x; cin >> n >> x; vector<int> a(n); for(int& i : a) { cin >> i; } int ans = 0; vector<int> suff, suff_len; get(suff, suff_len, a); for(int& i : suff) { i += x; } ans = *max_element(suff_len.begin(), suff_len.end()); // suff.push_back(0); // suff_len.push_back(0); vector<int> dp; for(int i = 0; i < n; i++) { int pos = lower_bound(dp.begin(), dp.end(), a[i]) - dp.begin(); if (pos == (int) dp.size()) { dp.push_back(a[i]); } else { dp[pos] = a[i]; } ans = max(ans, (int) dp.size()); ans = max(ans, suff_len[i]); if (i == n-1) continue; auto it = lower_bound(dp.begin(), dp.end(), suff[i+1]); ans = max(ans, (it - dp.begin()) + suff_len[i+1]); } cout << ans << "\n"; // for(int i = 0; i < n; i++) { // cout << suff[i] << " " << suff_len[i] << "\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...