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