アルゴリズム
答えで二分探索
判定問題への変換
候補値 に対する判定 ok(x) が単調なら、真偽の境界を二分探索できる。「最大値を最小化」「最小値を最大化」という形で頻出する。
long long ng = -1;
long long ok = 1LL << 60;
while (abs(ok - ng) > 1) {
long long mid = ng + (ok - ng) / 2;
(check(mid) ? ok : ng) = mid;
}
設計の確認
ok(x)の意味を一文で書く- 単調性を証明する
- 初期値が必ず
NG/OKであると確認する - 整数か実数かに応じて終了条件を決める