Submission #284400

#TimeUsernameProblemLanguageResultExecution timeMemory
284400Revo7Global Warming (CEOI18_glo)C++14
58 / 100
1183 ms30576 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define left 2*i+1 #define righ 2*i+2 #define mid (l+r)/2 #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; const ll maxn=2e5+100; const ll inf=1e9+10; const ll mod=1e9+7; const ll base=27; int n,k,ans; int b[maxn],a[maxn],pre[maxn],suf[maxn]; map<int,int>ha; vector<int>st; int qur(int i,int l,int r,int ql,int qr){ if(ql>qr)return 0; if(r<ql||l>qr)return 0; if(l>=ql&&r<=qr)return st[i]; return max(qur(left,l,mid,ql,qr),qur(righ,mid+1,r,ql,qr)); } void upd(int i,int l,int r,int id,int val){ if(r<id||l>id)return; if(l==r){ st[i]=max(st[i],val); return; } upd(left,l,mid,id,val); upd(righ,mid+1,r,id,val); st[i]=max(st[left],st[righ]); } int main() { cin>>n>>k; for(int i=0;i<n;i++){ cin>>a[i]; ha[a[i]]=1; ha[a[i]-k]=1; } int cnt=0; for(auto &x:ha){ x.second=cnt++; } st.assign(4*cnt+10,0); for(int i=0;i<n;i++){ b[i]=ha[a[i]]; pre[i]=1+qur(0,0,cnt-1,0,b[i]-1); upd(0,0,cnt-1,b[i],pre[i]); ans=max(ans,pre[i]); } //for(int i=0;i<n;i++)cout<<pre[i]<<' ';cout<<endl; st.assign(4*maxn+10,0); for(int i=n-1;i>=0;i--){ suf[i]=1+qur(0,0,cnt-1,b[i]+1,cnt-1); upd(0,0,cnt-1,b[i],suf[i]); if(i){ int cur=pre[i-1]+qur(0,0,cnt-1,ha[a[i-1]-k]+1,cnt-1); ans=max(ans,cur); //if(cur==6)cout<<i<<endl; } } //for(int i=0;i<n;i++)cout<<suf[i]<<' ';cout<<endl; 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...