P11405 [RMI 2020] 秘鲁 / Peru
题目背景
译自 [8th Romanian Master of Informatics, RMI 2020](https://rmi.lbi.ro/rmi_2020/) D1T3。$\texttt{0.2s,0.25G}$。
题目描述
**这是一道(函数式)交互题。**
有 $N$ 只甲虫在桌面上排成一行,从左到右编号为 $0\sim N-1$。第 $i$ 只甲虫的**体力**为 $S_i$。
每次可以选择**连续的**至多 $K$ 只甲虫,用 $E$ 的力量去击打它们。被击打的甲虫,若体力**不大于** $E$,则会死亡,否则无事发生。**死亡的甲虫会留在原地,可以击打死亡的甲虫。**
可以多次击打甲虫,每次 $E$ 的大小可以不同。
定义 $f(i)$ 为:杀死最左边的 $i$ 只甲虫,需要力量和的最小值。对于 $i=1,2,\cdots,N$,求出 $f(i)$。
为了减小输出量,你只需要求出 $\displaystyle \left(\sum_{1\le i\le N} f(i)\cdot 23^{N-i}\right)\bmod (10^9+7)$。
### 实现细节
你不需要,也不应该实现 main 函数。
你需要实现以下的函数:
```cpp
int solve(int N, int K, int S[]);
```
交互库会调用 `solve` 函数恰好一次。参数的含义:
- `N`:甲虫数量。
- `K`:一次击打最多击打的连续甲虫数。
- `S`:每只甲虫的体力。
返回一个整数表示 $\displaystyle \left(\sum_{1\le i\le N} f(i)\cdot 23^{N-i}\right)\bmod (10^9+7)$。
输入格式
Sample grader 按照如下格式读取输入:
第一行,两个正整数 $N,K$;
第二行,$N$ 个正整数 $S_0,S_1,\cdots,S_{N-1}$。
输出格式
Sample grader 输出一个整数,表示选手返回的答案。
说明/提示
#### 样例解释
$f$ 的值分别为 $3,3,9,12,12,20,23,23$。
#### 数据范围
对于 $100\%$ 的数据,保证:
- $1\le K\le N\le 2.5\times 10^6$;
- $1\le S_i\le 2\times 10^9$。
| 子任务编号 | $N,Q\le $ | 得分 |
| :--: | :--: | :--: |
| $ 1 $ | $ 2\times 10^3 $ | $18$ |
| $ 2 $ | $ 4\times 10^5 $ | $31$ |
| $ 3 $ | $ 2.5\times 10^6 $ | $51$ |