题面描述 你有 n 块记忆碎片,排成一行,第 i 块碎片的时间标签为 ti,(t1,t2,…,tn) 是 1 到 n 的一个排列。 你希望通过交换把它们重排为 [1,2,…,n]。每次操作:
求:完成排序所需的最少精力。
你得到了n块[记忆碎片],它们排成一排,第i块碎片所对应记忆发生的时间为ti。t1,t2,...,tn是1到n的一个排列。
你希望重新排列这n块碎片,使它们单调递增(即重排为1,2,...,n),排列的规则为:
你有一个能力值k,每次你可以选择两块发生时间相差不超过k的碎片,交换它们的顺序;
由于发生时间过于靠近的两块碎片很难回想,对于两块发生时间相差恰好为1的碎片,交换它们需要消耗你1点精力;
对于发生时间相差大于1的碎片,变换它们则不需要耗费精力。
你想知道你最少需要消耗多少精力才能恢复你的[记忆]。
第一行输入两个整数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
说明
最优交换策略为:
交换t2 和t4,得到{2,4,3,1};
交换t1和t2,得到{4,2,3,1};
交换t1和t4,得到{1,2,3,4}。
至此,t已经有序,最少需要消耗0点精力。