#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define li pair<ll,int>
using namespace std;
int n;
li a[400003],b[400003];
ll x;
vector<ll> nen;
int st[1600003],lmx[400003],rmx[400003];
int lay(int x){
    return lower_bound(nen.begin(),nen.end(),x)-nen.begin()+1;
}
void update(int id,int l,int r,int i,int x){
    if (i<l||r<i) return;
    if (l==r){
        st[id]=max(st[id],x);
        return;
    }
    int mid=(l+r)/2;
    update(id*2,l,mid,i,x);
    update(id*2+1,mid+1,r,i,x);
    st[id]=max(st[id*2],st[id*2+1]);
}
int get(int id,int l,int r,int u,int v){
    if (v<l||r<u) return 0;
    if (u<=l&&r<=v) {
        return st[id];
    }
    int mid=(l+r)/2;
    return max(get(id*2,l,mid,u,v),get(id*2+1,mid+1,r,u,v));
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>x;
    for (int i=1;i<=n;i++) {
        cin>>a[i].fi;
        a[i].se=b[i].se=i;
    }
    for (int i=1;i<=n;i++){
        nen.push_back(a[i].fi);
        nen.push_back(x+a[i].fi);
    }
    sort(nen.begin(),nen.end());
    nen.erase(unique(nen.begin(),nen.end()),nen.end());
    int m=nen.size();
    for (int i=0;i<=m*4;i++) st[i]=0;
    for (int i=1;i<=n;i++){
        b[i].fi=lay(a[i].fi+x);
        a[i].fi=lay(a[i].fi);
    }
    for (int i=1;i<=n;i++) {
        int sz=(a[i].fi>1)?get(1,1,m,1,a[i].fi-1):0;
        lmx[a[i].se]=sz+1;
        update(1,1,m,a[i].fi,sz+1);
    }
    for (int i=0;i<=m*4;i++) st[i]=0;
    for (int i=n;i>0;i--){
        int sz=(b[i].fi+1<=m)?get(1,1,m,b[i].fi+1,m):0;
        rmx[b[i].se]=sz+1;
        update(1,1,m,b[i].fi,sz+1);
    }
    for (int i=0;i<=m*4;i++) st[i]=0;
    int kq=1;
    for (int i=1;i<=n;i++){
        int sz=get(1,1,m,1,b[i].fi-1);
        kq=max(kq,sz+rmx[i]);
        update(1,1,m,a[i].fi,lmx[i]);
    }
    cout<<kq;
    return 0;
}
| # | 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... |