atcoder#ARC160A. [ARC160A] Reverse and Count

[ARC160A] Reverse and Count

配点 : 400400

問題文

(1,2,,N)(1, 2, \dots, N) の順列 A=(A1,A2,,AN)A = (A_1, A_2, \dots, A_N) が与えられます。 1LRN1 \leq L \leq R \leq N を満たす整数の組 (L,R)(L, R) に対して、AALL 番目から RR 番目までの要素を反転してできる順列を f(L,R)f(L, R) とします。 ここで、「AALL 番目から RR 番目までの要素を反転する」とは、AL,AL+1,,AR1,ARA_L, A_{L+1}, \dots, A_{R-1}, A_RAR,AR1,,AL+1,ALA_R, A_{R-1}, \dots, A_{L+1}, A_{L} に同時に置き換えることを言います。

(L,R)(L, R)1LRN1 \leq L \leq R \leq N を満たすように選ぶ方法は N(N+1)2\frac{N(N + 1)}{2} 通りあります。 このような (L,R)(L, R) の組全てに対して順列 f(L,R)f(L, R) をすべて列挙して辞書順にソートしたときに、先頭から KK 番目にある順列を求めてください。

数列の辞書順とは?

数列 S=(S1,S2,,SS)S = (S_1,S_2,\ldots,S_{|S|}) が数列 T=(T1,T2,,TT)T = (T_1,T_2,\ldots,T_{|T|}) より辞書順で小さいとは、下記の 1. と 2. のどちらかが成り立つことを言います。 ここで、S,T|S|, |T| はそれぞれ S,TS, T の長さを表します。

  1. S<T|S| \lt |T| かつ $(S_1,S_2,\ldots,S_{|S|}) = (T_1,T_2,\ldots,T_{|S|})$。
  2. ある整数 1imin{S,T}1 \leq i \leq \min\lbrace |S|, |T| \rbrace が存在して、下記の 22 つがともに成り立つ。
    • $(S_1,S_2,\ldots,S_{i-1}) = (T_1,T_2,\ldots,T_{i-1})$
    • SiS_iTiT_i より(数として)小さい。

制約

  • 1N70001 \leq N \leq 7000
  • 1KN(N+1)21 \leq K \leq \frac{N(N + 1)}{2}
  • AA(1,2,,N)(1, 2, \dots, N) の順列

入力

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

NN KK

A1A_1 A2A_2 \dots ANA_N

出力

順列 f(L,R)f(L, R) を列挙して辞書順にソートしたときに、先頭から KK 番目にある順列を B=(B1,B2,,BN)B =(B_1, B_2, \dots, B_N) とする。 このとき以下の形式で BB を出力せよ。

B1B_1 B2B_2 \dots BNB_N

3 5
1 3 2
2 3 1

1LRN1 \leq L \leq R \leq N を満たす (L,R)(L, R) の組全てに対して順列 f(L,R)f(L, R) をすべて列挙すると次のようになります。

  • f(1,1)=(1,3,2)f(1, 1) = (1, 3, 2)
  • f(1,2)=(3,1,2)f(1, 2) = (3, 1, 2)
  • f(1,3)=(2,3,1)f(1, 3) = (2, 3, 1)
  • f(2,2)=(1,3,2)f(2, 2) = (1, 3, 2)
  • f(2,3)=(1,2,3)f(2, 3) = (1, 2, 3)
  • f(3,3)=(1,3,2)f(3, 3) = (1, 3, 2)

これらを辞書順にソートしたときに 55 番目に来る順列は f(1,3)=(2,3,1)f(1, 3) = (2, 3, 1) です。よってこれを出力します。

5 15
1 2 3 4 5
5 4 3 2 1

答えは f(1,5)f(1, 5) です。

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