CF1698B.Rising Sand

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Rising Sand

题目描述

nn 堆沙子,第 ii 堆有 aia_i 块沙子。如果 1<i<n1 < i < nai>ai1+ai+1a_i > a_{i-1} + a_{i+1},则称第 ii 堆“过高”。也就是说,如果某一堆沙子的数量比它左右两边的沙子数量之和还要多,则该堆为“过高”。(注意,数组两端的沙堆不能成为“过高”堆。)

现在给定一个整数 kk。每次操作可以选择 kk 个连续的沙堆,并且给这 kk 个沙堆每一堆都加上一单位的沙子。形式化地说,选择 1l,rn1 \leq l, r \leq n,满足 rl+1=kr-l+1=k,然后对所有 lirl \leq i \leq r,执行 aiai+1a_i \gets a_i+1

问经过若干次(可以为零次)操作后,最多能同时有多少堆沙子成为“过高”堆?

输入格式

输入包含多组测试数据。第一行包含一个整数 tt1t10001 \leq t \leq 1000),表示测试数据的组数。接下来每组测试数据包括:

每组测试数据的第一行包含两个整数 nnkk3n21053 \leq n \leq 2 \cdot 10^51kn1 \leq k \leq n),分别表示沙堆的数量和每次操作的连续沙堆数量。

每组测试数据的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n1ai1091 \le a_i \le 10^9),表示每堆沙子的初始数量。

保证所有测试数据中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每组测试数据,输出一个整数,表示经过若干次(可以为零次)操作后,最多能同时有多少堆沙子成为“过高”堆。

说明/提示

在第一个测试样例中,可以进行如下三次操作:

  • 给第 11 堆和第 22 堆各加一单位沙子:[3,10,2,4,1][\color{red}{3}, \color{red}{10}, 2, 4, 1]
  • 给第 44 堆和第 55 堆各加一单位沙子:[3,10,2,5,2][3, 10, 2, \color{red}{5}, \color{red}{2}]
  • 给第 33 堆和第 44 堆各加一单位沙子:[3,10,3,6,2][3, 10, \color{red}{3}, \color{red}{6}, 2]

此时第 22 堆和第 44 堆为“过高”堆,所以答案为 22。可以证明无法让超过 22 堆同时成为“过高”堆。

在第二个测试样例中,任何一次操作都会使所有沙堆都加 11 单位,因此“过高”堆的数量始终为 00

在第三个测试样例中,可以对任意一堆加 11 单位沙子。可以证明最多只能有 11 堆成为“过高”堆。

由 ChatGPT 4.1 翻译

样例

3
5 2
2 9 2 4 1
4 4
1 3 2 1
3 1
1 3 1
2
0
1

在线编程 IDE

建议全屏模式获得最佳体验