Submission #920092

#TimeUsernameProblemLanguageResultExecution timeMemory
920092Faisal_SaqibGlobal Warming (CEOI18_glo)C++17
55 / 100
2086 ms6168 KiB
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; const int N=2e5+100; int a[N],cpy[N],n,x; long long dp[N]; int suf[N]; int LIS() { int ans=0; for(int i=0;i<=n;i++) dp[i]=3e9; dp[0]=-3e9; for(int i=0;i<n;i++) dp[lower_bound(dp,dp+n+1,cpy[i])-dp]=cpy[i]; for(int i=0;i<=n;i++) if(dp[i]!=3e9) ans=max(ans,i); return ans; } void find_suf() { int ans=0; for(int i=0;i<=n;i++) dp[i]=3e9; dp[0]=-3e9; suf[n]=0; for(int i=n-1;i>=0;i--) { cpy[i]=-cpy[i]; int xc=lower_bound(dp,dp+n+1,cpy[i])-dp; ans=max(ans,xc); dp[xc]=cpy[i]; suf[i]=xc; cpy[i]=-cpy[i]; } } void reset() { for(int i=0;i<n;i++) cpy[i]=a[i]; } int main() { cin>>n>>x; for(int i=0;i<n;i++) cin>>a[i]; reset(); // cout<<"INIT "<<LIS()<<endl; if(x==0) { cout<<LIS()<<'\n'; } else if(x==1e9) { // For a prefix find the LIS // And for each suffix find the LIS find_suf(); int ans=0; int final=suf[0]; for(int i=0;i<=n;i++) dp[i]=3e9; dp[0]=-3e9; for(int i=0;i<n;i++) { int xc=lower_bound(dp,dp+n+1,cpy[i])-dp; ans=max(ans,xc); dp[xc]=cpy[i]; final=max(final,ans+suf[i+1]); } cout<<final<<'\n'; } else { int ans=0; for(int i=0;i<n;i++) { cpy[i]-=x; ans=max(ans,LIS()); } cout<<ans<<'\n'; } 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...