lower_bound和upper_bound是algorithm库中特别实用的两个函数,前者的作用是返回有序队列不小于x的第一个编号,后者则是返回大于x的第一个编号。
如{0,1,2,2,2,3}数组,用 lower_bound的返回值是2(第一个2),用upper_bound的返回值是5(第一个3)。
手动实现也非常的简单下面附代码。
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=1000;
int a[maxn]={0,1,2,2,2,3};
int lower_bound(int l,int r,int mu)
{
while(l<r)
{
int mid=(l+r)/2;
if(a[mid]>=mu)
{
r=mid;
}
else
{
l=mid+1;
}
}
return l;
}
int upper_bound(int l,int r,int mu)
{
while(l<r)
{
int mid=(l+r+1)/2;
if(a[mid]<=mu)
{
l=mid;
}
else
{
r=mid-1;
}
}
return l+1;
}
int main()
{
cout<<lower_bound(1,5,2)<<endl;
cout<<upper_bound(1,5,2)<<endl;
return 0;
}