lower_bound 这个函数是从已经排好序的序列a中利用二分搜索找出指向满足ai >= k的ai的最小的指针,注意是指针。upper_bound函数类似,就是求出满足ai > k的ai的最小的指针。
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100];
int main()
{
printf("输入序列个数:\n");
int k;
scanf("%d",&k);
printf("输入序列:\n");
for(int i=0; i<k; i++)
{
scanf("%d",&a[i]);
}
sort(a, a+k);
printf("输入查找的数:\n");
int t;
scanf("%d",&t);
printf("lower_bound:%d\n",lower_bound(a, a+k, t)-a);
printf("upper_bound:%d\n",upper_bound(a, a+k, t)-a);
return 0;
}
因为lower_bound函数是查询 ai >= k 的最小的指针。
而upper_bound函数是查询ai > k的最小的指针,那么就可以通过这个差异求出序列a中k的个数:
upper_bound(a, a+n, k) - lower_bound(a, a+n, k)
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100];
int main()
{
printf("输入序列个数:\n");
int k;
scanf("%d",&k);
printf("输入序列:\n");
for(int i=0; i<k; i++)
{
scanf("%d",&a[i]);
}
sort(a, a+k);
printf("输入查找的数:\n");
int t;
scanf("%d",&t);
printf("t的个数为:%d\n",upper_bound(a, a+k, t)-lower_bound(a, a+k, t));
return 0;
}