萤火虫
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

可恶的高木同学(咩),又捉弄我!

高木和西片带着他们的女儿小千来到山上看萤火虫,西片记得小时候和高木来过这座山,但是很遗憾没见到萤火虫,好在这次他们一家子没有白来,成功在河岸边见到了萤火虫。

然而,小千的身高太矮了,萤火虫不是飞太高就是飞太低,她很难看清楚,为了让小千看清楚,西片想出了一个好方法,他要借助手上的火把引诱萤火虫移动。

具体的,岸边共有 n 只萤火虫排成一排,从左到右,第 i 只萤火虫的高度为 h_i 。把岸看成水平线,那么每只萤火虫都会有一个高度,在岸以上的高度为正,在岸以下的高度为负,平行于岸边的高度为 0,每次西片有两种引诱方法,第一种是把长为 k 的火把横过来,引诱连续的 k 只萤火虫一起向上或向下移动一个单位的高度,第二种是用火把的火苗,直接把某只萤火虫向上或向下引诱到某一个高度 x。如果能够把所有的萤火虫都引诱到和岸边平行,那么小千就能看清楚它们。

然而,尽管西片是体育老师,他的体力也是有限的,因此,他想尽量少的采取第二种方法。

作为聪明的高木同学,请你告诉西片,他最少要采取多少次第二种方法,才能让小千看清楚所有的萤火虫。

输入描述:

第一行一个整数 T ,代表有 T 组测试用例。

对于每组用例,第一行输入两个整数 nk,表示萤火虫的数量和火把的长度。

接下来一行输入 n 个整数 h_i,其中 1\le i \le n ,表示从左到右每只萤火虫的高度。

输入保证:

1\le T\le2*10^5

1\le k\le n\le2*10^5

0\le h_i\le10^9

\sum n\le2*10^5

输出描述:

输出 T 行整数。

对于每组用例,输出最少的采取第二种方法的次数。
示例1

输入

复制
2
5 3
1 2 3 4 5
5 5
1 2 3 3 3

输出

复制
2
2

说明

样例1一种解决方案
1 2 3 4 5
选择区间[1,3]操作1:0 1 2 4 5
选择区间[2,4]操作1:0 0 1 3 5
选择区间[3,5]操作1:0 0 0 2 4
选择位置[4]操作2:0 0 0 0 4
选择位置[5]操作2:0 0 0 0 0