#CF1918B. 最小化逆序对
最小化逆序对
B. 最小化逆序对
时间限制:每个测试 秒
内存限制:每个测试 MB
给定两个长度为 的排列 和 。排列是由 到 共 个元素组成的数组,其中所有元素互不相同。例如,数组 是一个排列,而 和 不是。
你可以任意多次地选择两个下标 和 ,然后同时交换 与 以及 与 。
你讨厌逆序对,因此你希望最小化两个排列中逆序对的总数。
在一个排列 中,逆序对是指满足 且 的下标对 。例如,若 ,则其中有 个逆序对(对应的下标对为 、 和 )。
输入
第一行包含一个整数 ()——测试用例的数量。
每个测试用例由三行组成。第一行包含一个整数 ()——排列 和 的长度。第二行包含 个整数 ()——排列 。第三行以类似格式给出排列 。
保证所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出两个排列 和 (格式与输入相同)——进行若干次操作后得到的排列。 和 中的逆序对总数应为所有能通过题目所述操作得到的排列对中的最小可能值。
若存在多个答案,输出任意一个即可。
样例
输入
3
5
1 2 3 4 5
5 4 3 2 1
3
3 1 2
3 1 2
6
2 5 6 1 3 4
1 5 3 6 2 4
输出
3 2 5 1 4
3 4 1 5 2
1 2 3
1 2 3
2 3 4 6 5 1
1 2 4 3 5 6
说明
在第一个测试用例中,可能的最小逆序对总数为 。
在第二个测试用例中,我们可以同时对两个排列进行排序。为此,可以执行如下操作:
- 交换两个排列中位置 和 上的元素。操作后,,。
- 交换位置 和 上的元素。操作后, 和 均有序。
在第三个测试用例中,可能的最小逆序对总数为 。