我们有n块「记忆碎片」,它们按顺序排列,每块对应的记忆发生时间为ti,且t1,t2,…,tn构成1到n的一个排列。目标是将这些碎片重新排列成单调递增的顺序,也就是排序为1,2,…,n。允许的交换操作必须满足:
要求计算出在最优策略下恢复记忆所需消耗的最少精力。
你得到了n块「记忆碎片」,它们排成一排,第i块碎片所对应记忆发生的时间为ti;。t1,t2,...,tn是1到n的一个排列。
你希望重新排列这n块碎片,使它们单调递增(即重排为1,2,...,n) ,排列的规则为:
你想知道你最少需要消耗多少精力才能恢复你的「记忆」。
第一行输入两个整数n,k(4≦n≦2×105;1≦k≦n−1)代表「记忆碎片」的个数、你的能力值。
第二行输入n个不同的整数t1,t2,...,tn(1≦ti≦n),其中,ti代表第i块「记忆碎片」所对应记忆的发生时间。
输出一个整数,表示你最少需要消耗的精力。
输入
4 1
2 1 3 4
输出
1
在这个样例中,交换t1和 t2即可。我们可以证明,最少需要消耗1点精力。
输入
4 3
2 1 3 4
输出
0
最优交换策略为:
交换t1和t4,得到{4,1,3,2};
交换t2和t4,得到{4,2,3,1};
交换t1和t4,得到{1,2,3,4}。
至此,t已经有序,最少需要消耗0点精力。