二分小技巧

有一些题目,常常会用到二分,但无良的出题人总是会卡人们的二分。。。比方说你每次二分总要分满log次,而且还总要分n次,这样效率就变成了n*log(n),很是GG。但是思考发现我们的二分存在一个小问题,就是说右端点总是被卡死的,如果解决这个瓶颈,便能实现不被卡。

而能二分说明它一定有二分性质,也就是说我们可以来次倒着的二分确定它的届。

假设说最低是l,先试试l+1,再试试l+2^1,再试试l+2^2,再试试l+2^3……知道你找到了一个不合法的r=l+2^k,好的,你就把它当r,l=l+2^(k-1)(因为之前确定是合法的了),来二分,和普通二分无异。这样可以处理掉极端数据,由于你确定r的过程也是单log(n)的,所以理论复杂度没有太大变化。

当然,要注意的是,你确定二分方案可行的check不能复杂度太高!常数是很可怕的,有时候并不一定能接受。不要每个二分都这么打,有可能会聪明反被聪明误。

原文地址:https://www.cnblogs.com/Atoner/p/8111355.html