萌新太傻,只会用两个尺取来解,大佬来帮帮呗
#include<bits/stdc++.h>
#define int long long
using namespace std;
int s,n,val[100007];
struct maxxx{
int maxx,r,l;
};
int saby_weidaima(){
maxxx max1,max2;
max1.maxx=max2.maxx=0;
for(int l=1,r=0;l<=n;l++){
while(r<=n&&val[r]-val[l]<=s)
++r;
if(max1.maxx<r-l)
max1={r-l,r,l};
}
int ll=0;
for(int l=1,r=0;l<=n;l++){
if(l>=max1.l&&l<max1.r)
continue;
ll=0;
while(r<=n&&val[r]-val[l]<=s){
if(r>=max1.l&&r<max1.r)
++ll;
++r;
}
r-=ll;
if(max2.maxx<r-l)
max2={r-l,r,l};
}
return max2.maxx+max1.maxx;
}
signed main(){
scanf("%lld%lld",&n,&s);
for(int i=1;i<=n;i++)
scanf("%lld",val+i);
val[n+1]=2e9+1e8;
sort(val+1,val+n+2);
printf("%lld\n",saby_weidaima());
}