C - 数列の組み替え Editorial

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

りんごさんは長さ NN の数列を持っています。数列は相異なる 11 ~ NN の整数からなります。りんごさんはこの数列を KK 箇所で切って K+1K+1 個の連続した部分に分割し、それらを好きな順番で連結することにより新たな数列を作ろうとしています。りんごさんが作ることのできる数列のうち辞書順最小のものを求めてください。


入力

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

NN KK
A1A_1 A2A_2 ... ANA_N
  • 11 行目には、22 つの整数 N(2N105),K(1KN1)N (2 ≦ N ≦ 10^5), K (1 ≦ K ≦ N-1) が空白区切りで与えられる。これは、数列の長さが NN、数列を切る場所が KK 箇所であることを表す。
  • 22 行目には、NN 個の整数が空白区切りで与えられる。このうち i(1iN)i (1 ≦ i ≦ N) 番目の整数 Ai(1AiN)A_i (1 ≦ A_i ≦ N) は、数列の ii 番目の数を表す。ただし、AiA_i は全て相異なることが保証される。

出力

出力は NN 行からなる。このうち ii 行目には、りんごさんが作ることのできる数列のうち辞書順最小の数列の ii 番目の数を表す 11 つの整数を出力せよ。出力の末尾にも改行を入れること。


入力例1Copy

Copy
5 3
1 3 5 2 4

出力例1Copy

Copy
1
2
3
5
4

135241 | 3 5 | 2 | 4 と切って 123541 | 2 | 3 5 | 4 と並べ替えると辞書順最小の数列になります。


入力例2Copy

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

出力例2Copy

Copy
1
2
3
4
6
7
5
8
9


2025-04-09 (Wed)
15:00:47 +00:00