一般看到给的是数组然后排列的顺序也有序的时候可以想想二分。
在二分中,分为整数二分和实数二分。其中整数二分比较麻烦,实数二分相对比较简单。
其中需要注意二分的实质不是单调,有单调性可以使用二分,没有单调性也可二分。
1.mid=(l+r)>>1;
具体代码:bool check(int x)
{
其中需要验证的性质。
}
2.int bsearch_1(int l,int r)
{
while(l<r)
{
int mid=(l+r)/2;
if(check(mid))r=mid;
else l=mid+1;
}
}
return l;(二分到最后,l与r的值相等)
int bsearch_2(int l,int r)
{
while(l<r)
{
int mid=(l+r+1)/2;
if(check(mid))l=mid;
else r=mid-1;
}
}
此处一定要注意,mid的取值,当r=mid的时候,是不需要+1的,而l=mid的时候是需要+1的;
(+1的目的是为了防止陷入死循环哦。)
最后,y总的课很好很好哦。(acwing)