CF1698B.Rising Sand

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

Rising Sand

题目描述

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

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

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

输入格式

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

每组测试数据的第一行包含两个整数 nn 和 kk(3≤n≤2⋅1053 \leq n \leq 2 \cdot 10^5,1≤k≤n1 \leq k \leq n),分别表示沙堆的数量和每次操作的连续沙堆数量。

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

保证所有测试数据中 nn 的总和不超过 2⋅1052 \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

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