Submission #367918

#TimeUsernameProblemLanguageResultExecution timeMemory
367918ogibogi2004Global Warming (CEOI18_glo)C++14
100 / 100
1098 ms50176 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=2e5+6; const int MAXM=2e6+6; set<int>s; int n,x; int a[MAXN]; int fen[MAXM]; void update(int idx,int val) { idx++; for(;idx<MAXM;idx+=idx&(-idx)) { fen[idx]=max(fen[idx],val); } } int query(int idx) { idx++; int ret=0; for(;idx>0;idx-=idx&(-idx)) { ret=max(ret,fen[idx]); } return ret; } map<int,int>mp; int dpl[MAXN],dpr[MAXN]; int main() { cin>>n>>x; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++) { s.insert(a[i]); s.insert(a[i]-x); } int cnt=1; for(auto xd:s) { ++cnt; mp[xd]=cnt; } for(int i=1;i<=n;i++) { int j=mp[a[i]]; dpl[i]=query(j-1)+1; update(j,dpl[i]); } memset(fen,0,sizeof(fen)); for(int i=n;i>=1;i--) { int j=mp[a[i]]; dpr[i]=query(MAXM-j-1)+1; update(MAXM-j,dpr[i]); } memset(fen,0,sizeof(fen)); int ans=0; for(int i=n;i>=1;i--) { int j=mp[a[i]-x]; ans=max(ans,dpl[i]+query(MAXM-j-1)); j=mp[a[i]]; update(MAXM-j,dpr[i]); } cout<<ans<<endl; 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...