#include<bits/stdc++.h>
using namespace std;
#define int long long
#define first fs
#define sc second
#define pb push_back
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
const int N=1e6+5;
int ans,suf[N],pref[N],dppr[N],dpsuf[N],a[N];
signed main(){
int n,x;
cin>>n>>x;rep(i,1,n){cin>>a[i];dppr[i]=1e18;dpsuf[i]=1e18;}
rep(i,1,n){
int idx=lower_bound(dppr+1,dppr+n+1,a[i]-x)-dppr;
dppr[idx]=a[i]-x;
pref[i]=idx;
ans=max(ans,idx);
}
reverse(a+1,a+n+1);
rep(i,1,n){
int idx2=lower_bound(dpsuf+1,dpsuf+n+1,-(a[i]-x))-dpsuf;
ans=max(ans,pref[n-i+1]+idx2-1);
int idx=lower_bound(dpsuf+1,dpsuf+n+1,-a[i])-dpsuf;
dpsuf[idx]=-a[i];
}
cout<<ans<<endl;
}
# | 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... |