100 atcoder#ARC144C. [ARC144C] K Derangement

[ARC144C] K Derangement

配点 : 600600

問題文

正整数 N,KN, K が与えられます. 11 から NN までの整数からなる順列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N) であって次の条件を満たすもののうち, 辞書順最小のものを求めてください.

  • 任意の ii (1iN1\leq i\leq N) に対して AiiK\lvert A_i - i\rvert \geq K が成り立つ.

そのような順列が存在しない場合には,-1 を出力してください.

数列の辞書順とは?

相異なる数列 SS と数列 TT の大小を判定するアルゴリズムを以下に説明します.

以下では SSii 番目の要素を SiS_i のように表します.また, SSTT より辞書順で小さい場合は S<TS \lt T ,大きい場合は S>TS \gt T と表します.

  1. SSTT のうち長さが短い方の文字列の長さを LL とします.i=1,2,,Li=1,2,\dots,L に対して SiS_iTiT_i が一致するか調べます.
  2. SiTiS_i \neq T_i である ii が存在する場合,そのような ii のうち最小のものを jj とします.そして,SjS_jTjT_j を比較して, SjS_jTjT_j より(数として)小さい場合は S<TS \lt T ,大きい場合は S>TS \gt T と決定して,アルゴリズムを終了します.
  3. SiTiS_i \neq T_i である ii が存在しない場合, SSTT の長さを比較して,SSTT より短い場合は S<TS \lt T ,長い場合は S>TS \gt T と決定して,アルゴリズムを終了します.

制約

  • 2N3×1052\leq N\leq 3\times 10^5
  • 1KN11\leq K\leq N - 1

入力

入力は以下の形式で標準入力から与えられます.

NN KK

出力

条件を満たす順列 AA のうち,辞書順最小のものを次の形式で出力してください.

A1A_1 A2A_2 \ldots ANA_N

そのような順列が存在しない場合には,-1 を出力してください.

3 1
2 3 1

条件を満たす順列は,(2,3,1)(2, 3, 1)(3,1,2)(3, 1, 2)22 つです.例えば (2,3,1)(2, 3, 1)

  • A11=1K\lvert A_1 - 1\rvert = 1 \geq K
  • A22=1K\lvert A_2 - 2\rvert = 1 \geq K
  • A33=2K\lvert A_3 - 3\rvert = 2 \geq K

であるため条件を満たしています.

8 3
4 5 6 7 8 1 2 3
8 6
-1