atcoder#ABC276C. [ABC276C] Previous Permutation

[ABC276C] Previous Permutation

配点 : 300300

問題文

(1,,N)(1, \dots, N) の順列 P=(P1,,PN)P = (P_1, \dots, P_N) が与えられます。ただし、(P1,,PN)(1,,N)(P_1, \dots, P_N) \neq (1, \dots, N) です。

(1,N)(1 \dots, N) の順列を全て辞書順で小さい順に並べたとき、PPKK 番目であるとします。辞書順で小さい方から K1K-1 番目の順列を求めてください。

順列とは?

(1,,N)(1, \dots, N)順列とは、(1,,N)(1, \dots, N) を並べ替えて得られる数列のことをいいます。

辞書順とは?

長さ NN の数列 A=(A1,,AN),B=(B1,,BN)A = (A_1, \dots, A_N), B = (B_1, \dots, B_N) に対し、AABB より辞書順で真に小さいとは、ある整数 1iN1 \leq i \leq N が存在して、下記の 22 つがともに成り立つことをいいます。

  • (A1,,Ai1)=(B1,,Bi1)(A_{1},\ldots,A_{i-1}) = (B_1,\ldots,B_{i-1})
  • Ai<BiA_i < B_i

制約

  • 2N1002 \leq N \leq 100
  • 1PiN(1iN)1 \leq P_i \leq N \, (1 \leq i \leq N)
  • PiPj(ij)P_i \neq P_j \, (i \neq j)
  • (P1,,PN)(1,,N)(P_1, \dots, P_N) \neq (1, \dots, N)
  • 入力される値は全て整数

入力

入力は以下の形式で標準入力から与えられる。

NN

P1P_1 \ldots PNP_N

出力

求める順列を Q=(Q1,,QN)Q = (Q_1, \dots, Q_N) として、Q1,,QNQ_1, \dots, Q_N をこの順に空白区切りで一行に出力せよ。

3
3 1 2
2 3 1

(1,2,3)(1, 2, 3) の順列を辞書順で小さい順に並べると次のようになります。

  • (1,2,3)(1, 2, 3)
  • (1,3,2)(1, 3, 2)
  • (2,1,3)(2, 1, 3)
  • (2,3,1)(2, 3, 1)
  • (3,1,2)(3, 1, 2)
  • (3,2,1)(3, 2, 1)

よって P=(3,1,2)P = (3, 1, 2) は小さい方から 55 番目であり、求める順列、すなわち小さい方から 51=45 - 1 = 4 番目の順列は (2,3,1)(2, 3, 1) です。

10
9 8 6 5 10 3 1 2 4 7
9 8 6 5 10 2 7 4 3 1