AtCoder Regular Contest 149 B問題 Two LIS Sum
問題
提出解答
問題の概要
整数列 に対して, の最長増加部分列の長さを と書くことにする.
の並び替え が与えられる. 次の操作を 回以上行うことができる.
- となる整数 を選び, と を, と をそれぞれ交換する.
操作後における の最大値を求めよ.
制約
- は の並び替え
解法
隣接交換を何回もできるので, 次のことが従う.
を任意の の並び替え と等しくすることができる.
また, が動く時, も同じ場所に動き, それ以外の時は動かないので, 次のことも従う.
何回かの隣接交換によって出来る2つの並び替えの組 において, であること, であることは同値である.
そして, 以下も従う.
何回かの隣接交換の結果を とする. このとき, を最大にするような の組のうち, となるものが存在する.
このとき, ならば, の最長増加部分列に寄与していない項 が存在する. を適切な場所に移動させることによって, 操作後の列を としたとき, とできる. また, が最大になるようにとってきたのだから, である. よって, となり, これを繰り返していくことによって, にすることができる.証明
何回かの隣接交換の結果 のうち, を最大にするようなものを取ってくる.
以上から, のときに最大値になるような操作後の組 が存在し, この は一意に定まることから, 答えは の並び替え を を に並び替えた時の とすることによって,
であることがわかった.
計算量は最長増加部分列を求めるパートで, Segment Tree, Binary Search どちらを使う方法にしても 時間である.