제출 #1157239

#제출 시각아이디문제언어결과실행 시간메모리
1157239ocasuGlobal Warming (CEOI18_glo)C++20
100 / 100
165 ms14512 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf=1e12; signed main(){ int n,x; cin>>n>>x; vector<int> a(n,0); for (int i=0; i<n; i++) cin>>a[i]; vector<int> pre(n,1), suf(n,1); vector<int> left(n,-1), right(n,-1); int ans=0; { set<pair<int,int>> s; for (int i=0; i<n; i++){ if (!s.empty()){ auto itr=s.lower_bound({a[i],-inf}); if (itr != s.begin()) { itr--; pre[i] = (*itr).second + 1; } itr = s.lower_bound({a[i]+x, -inf}); if (itr != s.begin()){ itr--; left[i] = (*itr).second; } } while (true){ auto itr=s.lower_bound({a[i],-inf}); if (!s.empty() and itr!=s.end() and (*itr).second <= pre[i]){ s.erase(itr); } else{ break; } } ans=max(ans, pre[i]); s.insert({a[i],pre[i]}); } } { set<pair<int,int>> s; for (int i=n-1; i>=0; i--){ if (!s.empty()){ auto itr=s.upper_bound({a[i],inf}); if (itr != s.end()) { suf[i] = (*itr).second + 1; } itr = s.upper_bound({a[i]-x, inf}); if (itr != s.end()){ right[i] = (*itr).second; } } while (true){ auto itr=s.lower_bound({a[i],-inf}); if (!s.empty() and itr!=s.begin() and (*(--itr)).second <= suf[i]){ s.erase(itr); } else{ break; } } s.insert({a[i],suf[i]}); } } for (int i=0; i<n-1; i++){ if (right[i]!=-1){ ans=max(ans, left[i] + suf[i]); } } for (int i=1; i<n-1; i++){ if (left[i] !=-1){ ans=max(ans, pre[i] + right[i]); } } //for (int i=0; i<n; i++){ // cout<<right[i]<<' '; //} //cout<<'\n'; cout<<ans<<'\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...