#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
using namespace std;
ll mod=1e9+7;
ll a[1000005],p[1000005],l,r,x,y,z,ans,t,n,q,mx,mn,k,d,dp[1000005],dp1[1000005],ind;
map <ll,ll> m;
bool ok,okk;
string s1;
set <ll> s;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
t=1;
//cin>>t;
while (t--){
cin>>n>>d;
for (int i=1; i<=n; i++){
cin>>a[i];
dp[i]=1e9; dp1[i]=1e9;
}
ans=0;
for (int i=1; i<=n; i++){
ind=lower_bound(dp+1,dp+n+1,a[i]-d)-dp;
dp[ind]=a[i]-d; p[i]=ind; ans=max(ans,ind);
}
for (int i=1; i<=n/2; i++) swap(a[i],a[n-i+1]);
for (int i=1; i<=n; i++){
ind=lower_bound(dp1+1,dp1+n+1,d-a[i])-dp1;
ans=max(ans,p[n-i+1]+ind-1);
ind=lower_bound(dp1+1,dp1+n+1,-a[i])-dp1; dp1[ind]=-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... |