会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
问题要求构造一个由 1 到 n 的排列,使得序列中恰好有 m 个「下沉」(即相邻位置满足左边元素大于右边元素的数对数量),且 0≤m<n。
我们可以利用「反转前缀」的方法来简洁地构造出满足条件的序列:
- 当 m=0 时,只需要构造一个完全升序的排列:1,2,…,n,此时没有任何下沉。
- 当 m≥1 时,考虑反转前 m+1 个数字组成的连续升序段 [1,2,…,m+1],将其变为 [m+1,m,…,1]。在这个长度为 m+1 的前缀内部,相邻元素依次是 (m+1,m),(m,m−1),…,(2,1),正好产生 m 个下沉。
- 前缀之后的部分保持原始顺序:m+2,m+3,…,n,这些元素与前面部分连接时,由于前缀最后一个元素是 1,而后面的第一个元素是 m+2(一定大于 1),因此不会新增下沉;后段内部也是升序,同样没有下沉。
题目内容
在一个数字王国里,收藏着编号为 1 到 n 的卷轴。你需要将这些卷轴排成一列。定义一对相邻卷轴为一个「下沉」,如果左边卷轴的编号大于右边卷轴。
给定整数 n 和 m,请你构造一个由 1 到 n 组成的序列,每个整数恰好出现一次,且序列中恰好有 m 个下沉。如果存在多种合法方案,任意输出一种即可。
约束:n 不超过 10^5,m 为整数且满足 0≤m<n。
输入描述
输入只有一行,包含两个整数 n 和 m,用空格分隔。