を から順に検証する解法では、 の最大値が であるため間に合いません。
そこで、 として の最小値を二分探索で求める方法を考えます。
ある の値でドラゴンを討伐出来た時、それ以上の でもドラゴンを討伐出来る事が保証されているためこの解法で解くことが出来ます。
ただし、一つ注意するべき事として の値を仮定した際、 の値次第では、ドラゴンに与えるダメージの合計は、 bit整数におさまらない場合があります。
そのため、 bit整数として扱う場合、ドラゴンに与えるダメージがドラゴンの体力を越えた時点で計算を打ち切る等の工夫が必要です。
C++での実装例は以下の通りです。