解题思路
题目要求构造一个 1∼n 的排列,使逆序对数量恰好为 k。
一个长度为 n 的排列最多有:
2n(n−1)
P4949.第1题-逆序对排列构造
题目内容
给定两个整数 n,k。请你构造一个长度为 n 的排列,使得它的逆序对数量恰好等于 k。
排列指用 1,2,…,n 这 n 个数各用一次、按任意顺序组成的数组;数组中没有重复数字,也没有超出 1∼n 的数字。
逆序对:在排列中,选择一对下标 i<j,如果前面的数比后面的数大(即 ai>aj),那么这对就算一个逆序对。题目要求排列中的所有这样的对数之和为 k。
输入描述
每个测试文件包含多组测试数据。第一行输入一个整数 T(1≤T≤2×105),表示测试数据组数。
接下来 T 行,每行输入两个整数 n,k(1≤n≤2×105;0≤k≤2n(n−1))。
除此之外,保证单个测试文件内所有数据的 n 之和不超过 2×105。
输出描述
对于每组测试数据,输出一行,包含 n 个整数,表示任意一个满足要求的排列。若存在多种答案,输出任意一种均可。
样例1
输入
3
3 0
3 2
5 7
输出
1 2 3
3 1 2
5 4 1 2 3
说明
- 第一组:[1,2,3] 逆序对数是 0。
- 第二组:[3,1,2] 中的逆序对只有 (3,1) 和 (3,2) 两对,总数是 2。
- 第三组:[5,4,1,2,3] 中,5 对后面 4,1,2,3 贡献 4 个逆序对,4 对后面 1,2,3 贡献 3 个逆序对,总共 4+3=7 个,等于 k。