#P16595. [GKS 2016 #E] Sorting Array
[GKS 2016 #E] Sorting Array
题目描述
我们正在设计一种有点另类的排序算法,用于对包含 到 所有整数的数组 进行排序。 中的整数最初可以是任意顺序。除了输入顺序外,该算法还依赖于两个整数 ( 不超过 )和 。算法的执行过程如下:
- 将 划分为 个互不相交的非空子数组 ,使得按顺序 拼接起来恰好得到 。
- 分别对每个子数组进行排序。
- 选择至多 个子数组,并任意多次交换这些子数组中的任意两个。
例如,考虑 且 。一种可能的划分为 个互不相交的子数组:
A1 = [1]
A2 = [5]
A3 = [4]
A4 = [3 2]
排序后:
A1 = [1]
A2 = [5]
A3 = [4]
A4 = [2 3]
交换 A4 与 A2 后:
A1 = [1]
A2 = [2 3]
A3 = [4]
A4 = [5]
我们希望通过以下方式证明该算法适用于分布式环境:对于给定的输入和 值,找出最大的分区数 ,使得通过合理选择分区和交换,可以将原始顺序排序。你能帮助我们计算出这个 吗?
输入格式
输入的第一行给出测试用例的数量 。
接下来有 个测试用例。每个测试用例由两行组成。第一行包含两个整数 和 ,含义如上所述。
测试用例的第二行包含 个整数 ,表示数组 。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是参数 的最大可能值。
5
5 2
1 5 4 3 2
5 2
4 5 1 2 3
6 2
6 3 5 2 4 1
5 3
4 5 1 2 3
6 3
1 2 6 4 5 3
Case #1: 4
Case #2: 2
Case #3: 3
Case #4: 3
Case #5: 6
提示
样例 #1:
与题目描述中的例子相同。
样例 #2:
交换两个块:
样例 #3:
对 排序,然后交换 与 ,得到:
样例 #4:
交换 与 ,然后交换 与 :
样例 #5:
交换 与 :
注意:前 个样例不会出现在大数据集中,后 个样例不会出现在小数据集中。
限制条件
。
。
对所有 ,。
对所有 ,。
小数据集(测试集 1 – 可见)
。
大数据集(测试集 2 – 隐藏)
。
翻译由 DeepSeek V4 Pro 完成