其实用二分也可以

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

bool check(int count, int n, int limit, const vector<int>& a) 
{
    for (int i = 0; i + count - 1 < n; ++i) 
    {
        if (a[i + count - 1] - a[i] <= limit) 
        {
            return true;
        }
    }
    return false;
}

int main()
{
    int n,p;
    cin >> n >> p;
    vector<int> a(n);
    for(int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    sort(a.begin(),a.end());

    int l=1,r=n,ans = 1;
    int limit = 2*p;

    while(l<=r)
    {
        int mid = l + (r-l)/2;
        if(check(mid,n,limit,a))
        {
            ans = mid;
            l = mid+1;
        }
        else
        {
            r = mid-1;
        }
    }

    cout << ans << endl;
    
}