想都是问题 做才是答案
lower_bound
#include<iostream>
using namespace std;
int lower(int *a,int x,int y,int val)
{
int mid;
while(x<=y)
{
mid=x+(y-x)/2;
if(a[mid]<val)
{
x=mid+1;
}
else
{
y=mid-1;
}
}
return x;
}
int main()
{
int a[11]={0,1,2,2,3,4,6,6,6,9,10};
int val=6; // 查找第一个大于等于val的数的位置
int pos=lower(a,1,10,val);
cout<<pos;
return 0;
}
upper_bound
#include<iostream>
using namespace std;
int upper(int *a,int x,int y,int val)
{
int mid;
while(x<=y)
{
mid=x+(y-x)/2;
if(a[mid]<=val)
{
x=mid+1;
}
else
{
y=mid-1;
}
}
return x;
}
int main()
{
int a[11]={0,1,2,2,3,4,6,6,7,9,10};
int val=2; // 查找第一个大于val的数的位置
int pos=upper(a,1,10,val);
cout<<pos;
return 0;
}