Submission #284401

#TimeUsernameProblemLanguageResultExecution timeMemory
284401Revo7Global Warming (CEOI18_glo)C++14
58 / 100
1284 ms44280 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; ll n,k,ans; ll b[maxn],a[maxn],pre[maxn],suf[maxn]; map<ll,ll>ha; vector<ll>st; ll qur(ll i,ll l,ll r,ll ql,ll 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(ll i,ll l,ll r,ll id,ll 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(ll i=0;i<n;i++){ cin>>a[i]; ha[a[i]]=1; ha[a[i]-k]=1; } ll cnt=0; for(auto &x:ha){ x.second=cnt++; } st.assign(4*cnt+10,0); for(ll 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(ll i=0;i<n;i++)cout<<pre[i]<<' ';cout<<endl; st.assign(4*maxn+10,0); for(ll 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){ ll 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(ll 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...