寻找左边的第一个x
int left_bound(int x)
{
int l=0,r=n;
while(l<r)
{
int mid=l+r>>1;
if(a[mid]<x) r=mid;
else if(a[mid]==x) r=mid;
else l=mid+1;
}
return l;
}
寻找最后一个x
int right_bound(int x)
{
int l=0,r=n;
while(l<r)
{
int mid=l+r+1>>1;
if(a[mid]<x)
l=mid;
else if(a[mid]==x)
l=mid;
else r=mid-1;
}
}
寻找第一个小于x的元素
int left_search(int x)
{
int l=0,r=n;
while(l<r)
{
int mid=l+r+1>>1;
if(a[mid]<x)
l=mid;
else if(a[mid]==x)
r=mid-1; //不保留x,直接去左边
else r=mid-1;
}
}
寻找第一个大于x的元素
int right_bound(int x)
{
int l=0,r=n;
while(l<r)
{
int mid=l+r>>1;
if(a[mid]<x)
l=mid+1;
else if(a[mid]==x)
l=mid+1;
else r=mid;
}
return l;
}