其实用二分也可以
#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;
}

京公网安备 11010502036488号