二分答案与三分答案
作者:互联网
当答案线性单调变化(也就是类一次函数),可以使用二分答案,取mid,若小于mid的满足,则大于mid的不满足或不更优,在题目中多表现为求:最大值最小,最小值最大。将求解转化为判定。
int middle(int l, int r)//二分答案
{
int ans = 0;
while (l <= r)
{
int mid = (l + r) >> 1;
if (check(mid)) l = mid + 1, ans = mid;
else r = mid - 1;
}
return ans;
}
当答案为单极值函数(单峰函数或单谷函数,也就是类二次函数)。可以采用三分求函数极值。
int two_middle(int l, int r)
{
while (l <= r)
{
int lmid = (2 * l + r) / 3, rmid = (l + 2 * r) / 3;
if (f(lmid) < f(rmid)) r = rmid;
else l = lmid;
}
return f(l);
}
标签:二分,int,mid,middle,答案,ans,三分 来源: https://www.cnblogs.com/zsj11337/p/16511223.html