CF1704B Luke is a Foodie

题目描述

Luke 喜欢吃东西。现在他面前有 $n$ 堆食物排成一行,第 $i$ 堆有 $a_i$ 单位的食物。 Luke 将从第 $1$ 堆走向第 $n$ 堆,他想要吃掉每一堆食物且不能回头。当 Luke 走到第 $i$ 堆时,只有当 $|v - a_i| \leq x$ 时他才能吃掉这堆食物,其中 $x$ 是一个固定的整数,$v$ 是 Luke 的“食物亲和力”。 在开始行走之前,Luke 可以将 $v$ 设置为任意整数。此外,对于每个 $i$($1 \leq i \leq n$),在吃第 $i$ 堆食物之前,Luke 可以将他的食物亲和力 $v$ 改为任意整数。 请你求出,为了吃掉所有的食物,最少需要改变多少次食物亲和力。 注意,初始选择 $v$ 的操作不计入改变次数。

输入格式

输入包含多组测试数据。第一行包含一个整数 $t$($1 \leq t \leq 10^4$),表示测试用例的数量。接下来是每组测试数据的描述。 对于每组测试数据,第一行包含两个整数 $n, x$($1 \leq n \leq 2 \cdot 10^5$,$1 \leq x \leq 10^9$),分别表示食物堆的数量和 Luke 能吃下食物堆的最大差值。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 10^9$)。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每组测试数据,输出一个整数,表示最少需要改变多少次食物亲和力。每个答案占一行。

说明/提示

在第一个测试用例中,Luke 可以在开始行走前将 $v$ 设为 $5$,然后可以直接吃掉所有食物,无需改变 $v$。 在第二个测试用例中,Luke 可以在开始行走前将 $v$ 设为 $3$,在吃第二堆食物前将 $v$ 改为 $10$,之后无需再改变 $v$。 在第四个测试用例中,Luke 可以在开始行走前将 $v$ 设为 $3$,在吃第六堆食物前将 $v$ 改为 $8$,之后无需再改变 $v$。 在第五个测试用例中,Luke 可以在开始行走前将 $v$ 设为 $4$,在吃第四堆食物前将 $v$ 改为 $6$,在吃第七堆食物前将 $v$ 改为 $12$,之后无需再改变 $v$。 由 ChatGPT 4.1 翻译