将题中所给的条件|a[i]-K|<=p化简一下可以得到-p=<a[i]-K<=K+P;

即 a[i]>=k-p ,a[i]<=k+p;

k可以取任意值,题干要求找出一个合适的k使得在这个区间内的人数尽可能多。

要想要在这个长度为2p的区间内包含尽可能多地值,那么它的边界一定是数组a的某一个值,接下来只需要找有多少个值在a[i]和a[i]+2p之间即可,

为了方便统计,先将数组a从小到大排序,再对于排序好后的数组遍历,依次统计每一个a[i]作为区间左边界时包含的值,找出其中的最大值即可.

#include<bits/stdc++.h>
using namespace std;
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 m=0;//最大的长度
    int cntlen =0;//当前的长度
    for(int i=0;i<n;i++){
        while(i+cntlen+1<n && a[i+cntlen+1]-a[i]<=2*p){
            cntlen++;
        }
        m = max(cntlen,m);
    }
    cout<<m+1;
}