好久没更新博客了,之前一直在准备比赛,忙着学算法和写题,今天写了一道二分答案的题,发现之前那种二分写法有一丢丢的问题,导致有道题只能过97%的点。
emmm,还是把最经典的二分的板子写在这记录下(这里参考了别的大佬的写法,感谢大佬~)。
二分的两个模板:
//查找左边界 SearchLeft 简写SL
int SL(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
return l; //最后r=l
}
//查找右边界 SearchRight 简写SR
int SR(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1; //需要+1 防止死循环
if (check(mid)) l = mid;
else r = mid - 1;
}
return r; // 最后r=l
}
每次使用这两个模板的时候,先想是找这个区间的左端点还是还是右端点,然后选择用哪个模板,最后再去写判断条件。