配点 : 600 点
問題文
正整数 N,K が与えられます.
1 から N までの整数からなる順列 A=(A1,A2,…,AN) であって次の条件を満たすもののうち,
辞書順最小のものを求めてください.
- 任意の i (1≤i≤N) に対して ∣Ai−i∣≥K が成り立つ.
そのような順列が存在しない場合には,-1
を出力してください.
数列の辞書順とは?
相異なる数列 S と数列 T の大小を判定するアルゴリズムを以下に説明します.
以下では S の i 番目の要素を Si のように表します.また, S が T より辞書順で小さい場合は S<T ,大きい場合は S>T と表します.
- S と T のうち長さが短い方の文字列の長さを L とします.i=1,2,…,L に対して Si と Ti が一致するか調べます.
- Si=Ti である i が存在する場合,そのような i のうち最小のものを j とします.そして,Sj と Tj を比較して, Sj が Tj より(数として)小さい場合は S<T ,大きい場合は S>T と決定して,アルゴリズムを終了します.
- Si=Ti である i が存在しない場合, S と T の長さを比較して,S が T より短い場合は S<T ,長い場合は S>T と決定して,アルゴリズムを終了します.
制約
- 2≤N≤3×105
- 1≤K≤N−1
入力
入力は以下の形式で標準入力から与えられます.
N K
出力
条件を満たす順列 A のうち,辞書順最小のものを次の形式で出力してください.
A1 A2 … AN
そのような順列が存在しない場合には,-1
を出力してください.
3 1
2 3 1
条件を満たす順列は,(2,3,1) と (3,1,2) の 2 つです.例えば (2,3,1) は
- ∣A1−1∣=1≥K
- ∣A2−2∣=1≥K
- ∣A3−3∣=2≥K
であるため条件を満たしています.
8 3
4 5 6 7 8 1 2 3
8 6
-1