CF1768B.Quick Sort

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Quick Sort

题目描述

给定一个长度为 nn 的排列 pp 和一个正整数 kk,其中 knk \le n

每次操作,你可以:

  • 选择 kk 个不同的元素 pi1,pi2,,pikp_{i_1}, p_{i_2}, \ldots, p_{i_k}
  • 将它们移除,然后按递增顺序添加到排列的末尾。

例如,如果 p=[2,5,1,3,4]p = [2,5,1,3,4]k=2k = 2,你选择 5533 进行操作,则 $[2, \color{red}{5}, 1, \color{red}{3}, 4] \rightarrow [2, 1, 4, \color{red}{3},\color{red}{5}]$。

请你求出将排列按递增顺序排序所需的最少操作次数。可以证明总是可以做到。

^\dagger 长度为 nn 的排列是由 11nnnn 个不同整数组成的数组,顺序任意。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是排列(22 在数组中出现了两次),[1,3,4][1,3,4] 也不是排列(n=3n=3 但数组中有 44)。

输入格式

第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含两个整数 nnkk2n1052 \le n \le 10^51kn1 \le k \le n)。

每个测试用例的第二行包含 nn 个整数 p1,p2,,pnp_1,p_2,\ldots, p_n1pin1 \le p_i \le n)。保证 pp 是一个排列。

保证所有测试用例的 nn 之和不超过 10510^5

输出格式

对于每个测试用例,输出一个整数,表示将排列排序所需的最少操作次数。可以证明总是可以做到。

说明/提示

在第一个测试用例中,排列已经有序。

在第二个测试用例中,你可以选择元素 33,排列将变为有序:$[\color{red}{3}, 1, 2] \rightarrow [1, 2, \color{red}{3}]$。

在第三个测试用例中,你可以选择元素 3344,排列将变为有序:$[1, \color{red}{3}, 2, \color{red}{4}] \rightarrow [1, 2, \color{red}{3},\color{red}{4}]$。

在第四个测试用例中,可以证明无法通过一次操作将排列排序。但如果你第一次选择元素 2211,第二次选择元素 3344,排列将变为有序:$[\color{red}{2}, 3, \color{red}{1}, 4] \rightarrow [\color{blue}{3}, \color{blue}{4}, \color{red}{1}, \color{red}{2}] \rightarrow [1,2, \color{blue}{3}, \color{blue}{4}]$。

由 ChatGPT 4.1 翻译

样例

4
3 2
1 2 3
3 1
3 1 2
4 2
1 3 2 4
4 2
2 3 1 4
0
1
1
2

在线编程 IDE

建议全屏模式获得最佳体验