Submission #1214393

#TimeUsernameProblemLanguageResultExecution timeMemory
1214393goduadzesabaGlobal Warming (CEOI18_glo)C++20
100 / 100
610 ms34920 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N=1e6+5,mod=1e9+7,inf=2e18; int n,x,k,a[N],b[N],dp[N],ds[N],f[N],ans; map <int,int> mp; int get(int x){ int ret=0; for (int i=x; i>0; i-=i&(-i)) ret=max(ret,f[i]); return ret; } void upd(int x,int y){ for (int i=x; i<=k; i+=i&(-i)) f[i]=max(f[i],y); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>x; dp[0]=0; for (int i=1; i<=n; i++){ cin>>a[i]; mp[a[i]]=0; mp[a[i]-x]=0; } for (auto &i:mp) i.second=++k; for (int i=1; i<=n; i++){ b[i]=mp[a[i]]; dp[i]=get(b[i]-1)+1; upd(b[i],dp[i]); } for (int i=1; i<=k; i++) f[i]=0; ans=0; for (int i=n; i>0; i--){ ds[i]=get(k-b[i])+1; ans=max(ans,get(k-mp[a[i]-x])+dp[i]); upd(k-b[i]+1,ds[i]); } cout<<ans; }
#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...