题意:
一个培养皿中有n个细菌,他们可以相互吞噬,只有当 ai>aj 且 ai<=aj+k(k为输入的常数),求最后还剩下多少细菌
思路:
直接用 upper_bound 查找就行
nlog(n)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
int a[maxn];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
int sum = n;
for(int i=0;i<n;i++)
{
int x = upper_bound(a,a+n,a[i])-a;
if(x>=n) //如果数组中没有比a[i]还大的数 就返回end(等于字符串的长度)
{
//printf("%d\n",x);
continue;
}
if(a[i]+k>=a[x])
sum--;
}
printf("%d\n",sum);
return 0;
}