题目描述
给定正整数 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,算法结束。
- 如果所有 i 都有 Si=Ti,则比较 S 和 T 的长度,若 S 更短,则 S<T,否则 S>T,算法结束。
输入格式
输入为一行,包含两个整数:
N K
输出格式
输出满足条件的排列 A 中字典序最小的一个,格式如下:
A1 A2 … AN
如果不存在这样的排列,输出 -1。
样例 1
输入
3 1
输出
2 3 1
样例 2
输入
8 3
输出
4 5 6 7 8 1 2 3
样例 3
输入
8 6
输出
-1
说明/提示
数据范围
- 2≤N≤3×105
- 1≤K≤N−1
样例解释 1
满足条件的排列有 (2,3,1) 和 (3,1,2) 两个。例如 (2,3,1) 满足:
- ∣A1−1∣=1≥K
- ∣A2−2∣=1≥K
- ∣A3−3∣=2≥K
因此满足条件。
由 ChatGPT 4.1 翻译