遠回りな解法で解いたので,記録します。
共通考察
JOIとIOIは「OI」の部分を共有しているので,OIから考える。
まず,OIの「I」の部分はできるだけ後ろから取っても損しない。 (ここを前に残しても選択肢が少ないので)
そして,OIの「O」の部分は各「I」より前にあるもので,「I」に最も近いものを取ればよい。(同上)
また,「OI」グループはOが後ろにあればあるほど使いやすい。
想定の賢い方法
「OI」を何個使うかで二分探索して,JとIを適当に結合させる。
Rhoの賢くない方法
「J」とOIに結合できなかった「I」のindexの集合を とし,「OI」の「O」のindexの集合を とする。 の小さい方から何要素かを から削除し,各「O」に付随する「I」のindexをそれぞれ に挿入する。 そうして作った と で となるようにマッチングを組むとき,最大で何本組めるか?という問題になる。
から1要素削って に追加した時,減るマッチングはYの要素が減ってあぶれた高々1個である。また,1要素増えることもある。よってこれは凸関数で,三分探索ができる。 計算量がちょっとやばめだが,通る。
感想
想定解賢すぎるだろ