解法
2進数の桁DPです。
としたとき、
は現在見ている桁を表し、下から
桁目、
は
桁目で0を使うか1を使うか、
は桁DPで毎回出てくる、
以下が確定しているかどうか、です。
今回は、が大きい方から見ていきます。そして、現時点での答え、すなわち最大値を格納していきます。
答えはです。
前計算として、個の数字
について、
桁目が1である個数を計算しておきます。これを
とします。
遷移をざっと書きます。
の
桁目が
だった場合
となります。対して、
の
桁目が
だった場合
です。ここで、注意すべき点がいくつかあります。
まず、DPを開始する地点です。より大きい最小の
ではなく、
と
の最大値より大きい、最小の
になります。これはサンプルの3でわかります。
そして、これにより、の
桁目が
だった場合の
は、DPの開始直後の
だった場合は計算してはいけません。同様に、
の
桁目が
だった場合も、
でないと、
の遷移を行ってはいけません。どちらのパターンも、まだ
以下とは確定していないからです。
あとは、このDPを計算すれば、答えを求めることができます。