Submission #471134

#TimeUsernameProblemLanguageResultExecution timeMemory
471134zxcvbnmGlobal Warming (CEOI18_glo)C++14
62 / 100
100 ms12684 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--; 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; } suff.push_back(INT_MAX); 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()); auto it = lower_bound(dp.begin(), dp.end(), suff[i+1]); if (it == dp.begin()) continue; it--; if (it == dp.end()) continue; ans = max(ans, (it - dp.begin() + 1) + 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...