lower_bound()和upper_bound()的常见用法

lower_bound()
lower_bound(a+1,a+1+n,x):从数组的a+1位置到a+n位置二分查找第一个大于或等于x的数字,找到返回该数字的地址,不存在则返回a+1+n。通过返回的地址减去起始地址a,得到找到数字在数组中的下标。

#include<bits/stdc++.h>
using namespace std;
int a[105];
int n,x;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cin>>x;
	sort(a+1,a+1+n);
    cout<<lower_bound(a+1,a+1+n,x)-a;
}

返回第一个大于等于目标值的下标

upper_bound()
upper_bound(a+1,a+1+n,x):从数组的a+1位置到a+n位置二分查找第一个大于x的数字,找到返回该数字的地址,不存在则返回a+1+n。通过返回的地址减去起始地址a,得到找到数字在数组中的下标。

#include<bits/stdc++.h>
using namespace std;
int a[105];
int n,x;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cin>>x;
	sort(a+1,a+1+n);
    cout<<lower_bound(a+1,a+1+n,x)-a;
}
posted @ 2020-10-22 20:23  Sure05  阅读(203)  评论(0)    收藏  举报