100 atcoder#ARC144C. [ARC144C] K Derangement

[ARC144C] K Derangement

题目描述

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

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

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

数列の辞書順とは? 相異なる数列 S S と数列 T T の大小を判定するアルゴリズムを以下に説明します.

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

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

输入格式

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

N N K K

输出格式

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

A1 A_1 A2 A_2 \ldots AN A_N

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

题目大意

  • 求字典序最小的 1n1\sim n 的排列 pp 满足 piik\left|p_i-i\right|\geq k,无解输出 1-1
  • 2n3×1052\leq n\leq 3\times 10^51p<n1\leq p<n
3 1
2 3 1
8 3
4 5 6 7 8 1 2 3
8 6
-1

提示

制約

  • 2 N 3× 105 2\leq\ N\leq\ 3\times\ 10^5
  • 1 K N  1 1\leq\ K\leq\ N\ -\ 1

Sample Explanation 1

条件を満たす順列は,(2, 3, 1) (2,\ 3,\ 1) (3, 1, 2) (3,\ 1,\ 2) 2 2 つです.例えば (2, 3, 1) (2,\ 3,\ 1) は -  A1  1 = 1  K \lvert\ A_1\ -\ 1\rvert\ =\ 1\ \geq\ K -  A2  2 = 1  K \lvert\ A_2\ -\ 2\rvert\ =\ 1\ \geq\ K -  A3  3 = 2  K \lvert\ A_3\ -\ 3\rvert\ =\ 2\ \geq\ K であるため条件を満たしています.