#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |