TG基本套路串讲

不知道第几部分:

二分:

1:最小值最大化

//最小值最大化
int le = 1, ri = n, mid, ans;
while (le <= ri)
{
    mid = (le + ri) / 2;
    if (check(mid)) ans = mid, le = mid + 1;
    else ri = mid - 1;
}
ans

2:最大值最小化(差不多的代码)

//最大值最小化
int le = 1, ri = n, mid, ans;
while (le <= ri)
{
    mid = (le + ri) / 2;
    if (check(mid)) ans = mid, ri = mid - 1;
    else le = mid + 1;
}
ans

3:求实数(依然差不多的代码)

//求实数
double le = 1, ri = n, mid;
for (int i = 1; i <= 50; i++)
{
    mid = (le + ri) / 2;
    if (check(mid)) ri = mid;
    else le = mid;
}
ans

三分:一个~神奇~的算法

//三分
le = 0; ri = min(i - 1, n - i);
while (le + 1 <= ri)
{
    w1 = (ri - le) / 3 + le;
    w2 = ri - (ri - le) / 3;
    v1 = make(i, w1);
    v2 = make(i, w2);
    if (v1 > v2) ri = w2 - 1; else le = w1 + 1;
}
le
原文地址:https://www.cnblogs.com/zhugezisong/p/10330912.html