配点 : 400 点
問題文
(1,2,…,N) の順列 A=(A1,A2,…,AN) が与えられます。
1≤L≤R≤N を満たす整数の組 (L,R) に対して、A の L 番目から R 番目までの要素を反転してできる順列を f(L,R) とします。
ここで、「A の L 番目から R 番目までの要素を反転する」とは、AL,AL+1,…,AR−1,AR を AR,AR−1,…,AL+1,AL に同時に置き換えることを言います。
(L,R) を 1≤L≤R≤N を満たすように選ぶ方法は 2N(N+1) 通りあります。
このような (L,R) の組全てに対して順列 f(L,R) をすべて列挙して辞書順にソートしたときに、先頭から K 番目にある順列を求めてください。
数列の辞書順とは?
数列 S=(S1,S2,…,S∣S∣) が数列 T=(T1,T2,…,T∣T∣) より辞書順で小さいとは、下記の 1. と 2. のどちらかが成り立つことを言います。
ここで、∣S∣,∣T∣ はそれぞれ S,T の長さを表します。
- ∣S∣<∣T∣ かつ $(S_1,S_2,\ldots,S_{|S|}) = (T_1,T_2,\ldots,T_{|S|})$。
- ある整数 1≤i≤min{∣S∣,∣T∣} が存在して、下記の 2 つがともに成り立つ。
- $(S_1,S_2,\ldots,S_{i-1}) = (T_1,T_2,\ldots,T_{i-1})$
- Si が Ti より(数として)小さい。
制約
- 1≤N≤7000
- 1≤K≤2N(N+1)
- A は (1,2,…,N) の順列
入力
入力は以下の形式で標準入力から与えられる。
N K
A1 A2 … AN
出力
順列 f(L,R) を列挙して辞書順にソートしたときに、先頭から K 番目にある順列を B=(B1,B2,…,BN) とする。
このとき以下の形式で B を出力せよ。
B1 B2 … BN
3 5
1 3 2
2 3 1
1≤L≤R≤N を満たす (L,R) の組全てに対して順列 f(L,R) をすべて列挙すると次のようになります。
- f(1,1)=(1,3,2)
- f(1,2)=(3,1,2)
- f(1,3)=(2,3,1)
- f(2,2)=(1,3,2)
- f(2,3)=(1,2,3)
- f(3,3)=(1,3,2)
これらを辞書順にソートしたときに 5 番目に来る順列は f(1,3)=(2,3,1) です。よってこれを出力します。
5 15
1 2 3 4 5
5 4 3 2 1
答えは 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