제출 #972972

#제출 시각아이디문제언어결과실행 시간메모리
972972efedmrlrGlobal Warming (CEOI18_glo)C++17
100 / 100
136 ms9312 KiB
#include <bits/stdc++.h> #define lli long long int #define pb push_back #define MP make_pair #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define REP(i, n) for(int i = 0; (i) < (n); (i)++) #define ld long double using namespace std; const int N = 1e5 + 5; const int INF = 1e9 + 500; const int MX = 1e9 + 5; void fastio() { ios_base::sync_with_stdio(false); cin.tie(NULL); } int n, x; vector<int> t; vector<int> pr, suf; void solve() { cin >> n >> x; t.assign(n + 1, 0); pr.resize(n + 3); suf.resize(n + 3); for(int i = 1; i <= n; i++) { cin >> t[i]; } set<array<int, 2> > st; for(int i = 1; i <= n; i++) { auto itr = st.lower_bound({t[i], 0}); if(itr == st.end()) { pr[i] = st.size() + 1; } else { pr[i] = (*itr)[1]; st.erase(itr); } st.insert({t[i], pr[i]}); } st.clear(); for(int i = n; i >= 1; i--) { auto itr = st.lower_bound({-t[i], 0}); if(itr == st.end()) { suf[i] = st.size() + 1; } else { suf[i] = (*itr)[1]; st.erase(itr); } st.insert({-t[i], suf[i]}); } st.clear(); int ans = 0; st.insert({INF, 0}); for(int i = n; i >= 1; i--) { int ret = pr[i]; if(t[i] + 1 - x <= MX) { ret += (*st.lower_bound({t[i] + 1 - x, 0}))[1]; } ans = max(ans, ret); auto itr = st.upper_bound({t[i], suf[i]}); if(itr != st.end() && (*itr)[1] >= suf[i]) { continue; } while(itr != st.begin()) { itr--; if((*itr)[1] > suf[i]) { break; } else { itr = st.erase(itr); } } st.insert({t[i], suf[i]}); } cout << ans << "\n"; } signed main() { fastio(); solve(); }
#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...