2022/3/3 1638B.Reverse
問題本文
長さnの順列が与えられます。 2つの整数を選択し、順列の部分列]を逆にする必要があります。
順列は、になります。
最初の順列に対して正確に1つの逆演算を実行することによって取得できる、辞書式に最小の順列を見つけます。
同じ長さのaとbの2つの異なる順列の場合、最初の位置が異なる場合、aは辞書式順序でbよりも小さく、aの要素が小さいことに注意してください。
順列は、1からnまでの任意の順序のn個の異なる整数で構成される配列です。
たとえば、[2,3,1,5,4] は順列ですが、[1,2,2]は順列ではありません(2が配列に2回表示されます)。 [1,3,4] も順列ではありません(n = 3ですが、配列には4があります)。
入力各テストには、複数のテストケースが含まれています。
最初の行には、テストケースの数である単一の整数が含まれています。
テストケースの説明は次のとおりです。
各テストケースの最初の行には、順列の長さである単一の整数が含まれています。
各テストケースの2行目には、順列の要素であるn個の整数が含まれています。
出力テストケースごとに、取得できる辞書式順序で最小の順列を印刷します。
解答
をとなる最初の要素とします。
要素のプレフィックスの場合、すでに変更されているため、何も変更する必要はありません。
最小の辞書式順序ですが、その位置にを使用したいと思います。
解決策は、セグメント] を逆にすることです。ここで、です。
すべてのに対してであるため、であることに注意してください。
したがって、すべてのに対してになります。
時間計算量:O(n)。