#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 1e6 + 5;

int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n,p;
    cin>>n>>p;
    vector<int> a(n);
    vector<int> b;
    int len;
    int max=0;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    int j=0;
    sort(a.begin(),a.end());
    for(int i=0;i<n;i++)
    {
        while(j<n&&a[j]-a[i]<=2*p)
        {
            j++;
            len=j-i;
            if(len>max)
            max=len;
        }
    }
    cout<<max;
    return 0;
}

蒟蒻题解QAQ:

本题明显的考察的是滑动窗口,我们看到题目自然想到要排序a数组并找到最大的满足差值小于等于2p的区间。既然是查找元素差值≤定值这一类的问题自然想到滑动窗口。所以进行区间查找,由于只需寻找最大值,故每次优化即可。注意不要暴力两个for循环,会超时,只需在原先基础上优化即能查找最佳区间。

欢迎大家关注本蒟蒻QAQ,蟹蟹!