AtCoder Beginner Contest 276 C問題 Previous Permutation
問題
提出解答
問題の概要
の順列 が与えられる. ただし, である.
の順列における辞書式順序の観点において の直前は何か?
制約
- は とは異なる の順列.
解法
を の順列とする.
を の直前, 直後 (存在する場合に限ってそう書くとする) とする. また, を
とする. このとき,
は定義より簡単に求められる. よって, を求める問題に帰着された.
今, であるから, である. よって, 次を満たすような 以上 以下の整数 が存在する.
このとき, にある より大きい最小の整数を , から を除いた長さ の列を昇順に並べた列を とする. このとき,
である.
これにより, を 時間で求めることができた. なお, ボトルネックになるソートについては がほとんど降順にならんでいることを利用すると, 時間に高速化することが出来る.