E問題で死ぬほど詰まって焦りましたが、こっちは割とスムーズに考察できました。
解法
E問題とほぼ同じ設定なので、鏡餅の個数を決め打って、先頭個を区間内のそれ以降の餅と貪欲にマッチングさせることで構築可能かの判定が可能であり、個数の上限で二分探索すれば解ける。
ただ、こちらはクエリがたくさんあるので、判定を程度には落とさないとTLEする。
ここで、先頭から個見た時点で、下敷きにする餅の候補が最低何個残っていれば個を選び切れるか、ということを考える。これは当然、個である。
更に、何番目の餅までは使っても良いかということを考えると、番目までは使ってもよい。
この情報を用ると、個のマッチングを構築可能であるためには、番目の餅がすべて番目までしか使っていない必要がある、と言える。
この判定は、各餅について下敷きにする餅としてマッチング可能な最小インデックスを前計算し、を範囲最大値クエリに載せ、からの最大値が以下であるかチェックすることで、で処理することができる。(あるいはSparse Tableなどを使えば)
各クエリごとで処理可能であるため、全体でで解くことができる。
実装例は以下の通り。
Submission #61602575 - HHKB Programming Contest 2025(AtCoder Beginner Contest 388)
あとがき
解けたときは爽快でしたが、AC判定出たのが終了1分前とかだったのでヒヤヒヤでした。
判定条件の言い換えをうまいこと思いついたのが助かりました。