loj#P4789. 「RMI 2020」Peru

「RMI 2020」Peru

注意事项

在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:

  • C++(标准为 C++ 17 及以上)

请在提交源代码前添加 #include "peru.h"

题目描述

题目译自 Romanian Master of Informatics 2020 Day1 T3 「Peru

今天早上,Roxy 在她的书桌上发现了 NN 只甲虫。这些甲虫从 00N1N-1 编号,每只甲虫 ii 都有一个力量值 SiS_{i}。Roxy 想把这些甲虫消灭掉,好专心做她的数学作业。为此,她买了一只特别的手套,可以用来拍击连续的 KK 只甲虫。只要 Roxy 使出的力气 EE 达到一定值,那些力量 SiS_{i} 小于等于 EE 的甲虫就会被压扁,而其他甲虫则毫发无伤。被压扁的甲虫依然留在原位,Roxy 可以随意多次使用这只手套。

Roxy 想知道,你能不能对于每个 1iN1 \leq i \leq N 帮她算出压扁前 ii 只甲虫所需的最小总力气。因为数字太多,她同意你只需要给她一个最终结果:$X_{0} \cdot 23^{N-1} + X_{1} \cdot 23^{N-2} + \ldots + X_{N-1}$ 对 109+710^{9}+7 取模的值,其中 XiX_{i} 表示压扁前 i+1i+1 只甲虫所需的最小总力气。

输入格式

你需要实现以下函数:

int solve(int N, int K, int* S);

这个函数只会被调用一次,返回上述表达式的结果对 109+710^{9}+7 取模。函数参数包括:

  • NN:甲虫数量;
  • KK:手套能拍击的连续甲虫数量;
  • SS:一个长度为 NN 的数组,其中 SiS_{i} 表示第 ii 只甲虫的力量。
8 3
3 2 9 8 7 11 3 4
720026253

数组 XX{3,3,9,12,12,20,23,23}\{3,3,9,12,12,20,23,23\}

数据范围与提示

对于所有输入数据,满足:

  • 1N2.51061 \leq N \leq 2.5\cdot 10^6
  • 1KN1 \leq K \leq N
  • 1Si21091 \leq S_{i} \leq 2\cdot 10^9

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 1818 1N20001 \leq N \leq 2000
22 3131 1N41051 \leq N \leq 4\cdot 10^5
33 5151 无附加限制