终极考验
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

小 W 面前有 n 个石柱,第 i 个石柱的高度为 h_i 米。小 W 拿到了一个整数 x。小 W 可以耗费 1 点能量完成以下操作:

  • 选择 i (1 \leq i \leq n),令 L = iR = \min\{i + x - 1, n\},对于所有满足 L \leq j \leq Rj,令 h_j \leftarrow h_j + 1。换言之,选择一个石柱,小 W 可以将它及其后面的共 x 个石柱升高 1 米。

小 W 希望最后石柱的高度单调不降。请求出小 W 耗费能量的最小值。

  • 一个序列 c_1, c_2, \ldots, c_n 是单调不降的,当且仅当 c_1 \le c_2 \le \ldots \le c_n

输入描述:

输入包含多组数据。

首先输入一行一个整数 T (1 \leq T \leq 10^4),表示数据的组数。

对于每组数据,首先输入一行两个整数 n, x (1 \leq x \leq n \leq 10^5),分别表示石柱的数量和小 W 拿到的整数。

接下来输入一行 n 个整数 h_1,h_2,\ldots h_n (1 \leq h_i \leq 10^9),其中 h_i 表示第 i 个石柱的初始高度。

保证对于一个测试点的所有数据,n 的和不超过 2 \cdot 10^5

输出描述:

对于每组数据,输出一行一个整数,表示最少需要的能量。可以证明,在有限次操作内,一定可以使得所有石柱的高度单调不降。
示例1

输入

复制
3
5 3
10 8 12 9 15
4 1
4 3 2 1
6 2
1 3 6 10 15 21

输出

复制
5
6
0

说明

在第一组数据中,小 W 可以首先选择 i = 4,重复 3 次操作,耗费 3 点能量,石柱高度变为 \{10,8,12,12,18\};然后选择 i = 2,重复 2 次操作,耗费 2 点能量,石柱高度变为 \{10,10,14,14,18\}。可以证明,没有耗费能量更少的操作方案。

在第三组数据中,不需要任何操作。