问题 5677 --交换次数

5677: 交换次数★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 39  解决: 26
[提交][状态][命题人:]

题目描述

给你一个长度为n的排列p和一个正整数kk≤n),在一次操作中,您可以任选k个不同的元素pi1pi2pik,将他们从排列中删除,然后再将它们按递增顺序添加到排列的末尾。

例如:如果p=[2,5,1,3,4]k = 2,你可以选53作为运算的元素,则通过操作后,[2,5,1,3,4]→[2,1,4,3,5]

请帮忙找出按递增顺序对排列进行排序所需的最小操作数。测试数据保证,这样做一定是可行。

特别提醒:长度为n的排列是由1nn个不同的整数按照任意顺序组成。例如,[2,3,1,5,4]是一个排列,但是[1,2,2]不是一个排列(2在数组中出现两次)[1,3,4]也不是一个排列(n=3,但是有4在数组中)

输入

第一行只有一个整数t(1≤t≤104):测试用例的数量。

接下来共2t行,每个测试用例两行:

第一行有两个整数nk:(2≤n≤1051≤k≤n)

第二行包含n个整数p1, p2,…,pn1≤pi≤n)。 测试数据保证p是一种排列,同时保证所有排列的长度n的和不超过105

输出

    输出共t行,每个测试用例一行,每行一个整数:将排列p变换为递增有序排列所需要的最少操作次数。
样例输入
Copy
4
3 2
1 2 3
3 1
3 1 2
4 2
1 3 2 4
4 2
2 3 1 4
样例输出
Copy
0
1
1
2

提示

在第一个测试用例中,排列已经排序,所需最少操作次数为0

在第二个测试用例中,您可以选择元素3,排列顺序变换如下:[3,1,2]→[1,2,3],则所需最少操作次数为1

在第三个测试用例中,您可以选择元素3和元素4,排列顺序变化如下: [1,3,2,4]→[1,2,3,4],则所需最少操作此时为1

     在第四个测试用例中,可以证明不可能对排列进行1次变换操作就可以将排列变换成有序排列。然而,如果我们第一次选择元素21,第二次选择元素34,排列变换如下:[2,3,1,4]→[3,4,1,2]→[1,2,3,4],则排列转换为有序排列,所以所需最少操作次数为2次。

来源

 

[提交][状态]