三分
while (l < r) {
int midl = l + (r - l) / 3;
int midr = r - (r - l) / 3;
long double ansl = check(midl);
long double ansr = check(midr);
if (ansl < ansr)
r = midr - 1;
else
l = midl + 1;
}while (r - l > eps){
mid = (l + r) / 2;
double fl = f(mid - eps), fr = f(mid + eps);
if (fl < fr)
l = mid; // 这里不写成mid - eps,防止死循环;可能会错过极值,但在误差范围以内所以没关系
else
r = mid;
}
Last updated