int lower(int l,int r,int key)
{
while(l<r)
{
int mid=l+(r-l)/2;
if(a[mid]==key) r=mid;
if(a[mid]<key) l=mid+1;
if(a[mid]>key) r=mid;
}
return l;
}
int upper(int l,int r,int key)
{
while(l<r)
{
int mid=l+(r-l+1)/2;
if(a[mid]==key) l=mid;
if(a[mid]<key) l=mid;
if(a[mid]>key) r=mid-1;
}
return l;
}
int binary(int l,int r,int key)
{
while(l<r)
{
int mid=l+(r-l)/2;
if(a[mid]==key) r=mid;
if(a[mid]<key) l=mid+1;
if(a[mid]>key) r=mid;
}
if(a[l]==key) return l;
else return -1;
}
binary在找不到相同元素时返回-1,upper和lower会返回满足条件的第一个位置
double fsearch(double l,double r,double key)
{
while(r-l>e)
{
double mid=l+(r-l)/2;
if(key<mid) r=mid;
else l=mid;
}return l;
}
浮点二分时,不用考虑边界问题
double threesearch(double l,double r)
{
double m1,m2;
while(r-l>e)//e是自定义精度
{
m1=l+(r-l)/3;
m2=r-(r-l)/3;
if(val(m1)<val(m2)) l=m1;//val是自定义函数
else r=m2;
}
}
三分