浅谈二分的细节问题
Posted may-2nd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈二分的细节问题相关的知识,希望对你有一定的参考价值。
最大值最小
给定一个不降的序列 (a),求其中大于等于 (x) 的第一个数。
其实就是查找第一个合法的点。
while(l<r)
{
mid=(l+r)>>1;
if(a[mid]<x)l=mid+1;
else r=mid;
}
如果当前 (mid) 小了,就向右寻找,当前 (mid) 不可能是答案,可以直接忽略 (mid),以 (mid+1) 为左端点。
如果当前 (mid) 大了或等于了,就向左寻找,当前 (mid) 可能是答案,不可以直接忽略 (mid),应该以 (mid) 为右端点。
初始条件默认 (lleq r)。因为是整除 (oldsymbol 2),所以在循环中 (midinleft[l,r ight),mid+1inleft[l,r ight])。
考虑死循环的情况,(l) 这里有 (+1) 肯定是不会的,而 (r=mid) 显然是不可能的。
所以最后 (l=r)。
最小值最大
以上是关于浅谈二分的细节问题的主要内容,如果未能解决你的问题,请参考以下文章