链接:https://ac.nowcoder.com/acm/contest/5158/B
来源:牛客网
你的团队中有 n 个人,每个人有一个能力值 ai ,现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的差值必须要小于等于 k ,为了让更多的人有参加比赛的机会,你最多能选择多少个人参加比赛?
比赛的时候想得太复杂了,又是去重又是排序乱七八糟的。
最后还是WA,看了下题解用upper_bound()正好。
int ans=upper_bound(a,a+n,x)-a;
返回a[0]~a[n]中大于x的第一个数,所以要先排序才可以做。
#include <bits/stdc++.h>
using namespace std;
int a[500005];
int main()
{
int t;
cin>>t;
while(t--)
{
int tot=0;
int res=-1;
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
int ans=upper_bound(a,a+n,a[i]+k)-a;
res=max(res,ans-i);
}
cout<<res<<endl;
}
}