P11239 [KTSC 2024 R2] 跳跃游戏

题目背景

**请使用 C++17 或 C++20 提交** 你需要在程序开头加入如下代码: ```cpp #include long long play_game(long long N, int Q, long long K, std::vector L, std::vector R); ```

题目描述

**题目译自 [2024년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사](https://www.ioikorea.kr/archives/ioitst/2024/) T2 「[점프 게임](https://assets.ioikorea.kr/ioitst/2024/2/jumpgame/jumpgame_statement.pdf)」** KOI 公司推出的跳跃游戏是一款通过多次跳跃穿越 $N$ 个踏板的游戏。具体来说,游戏中有 $N$ 个踏板按顺序排列在一条直线上,每个踏板从左到右依次编号为 $0, 1, \ldots, N-1$。游戏开始时,主角站在最左边的 $0$ 号踏板上,初始得分为 $0$。 对于每个 $i$ $(0 \leq i \leq N-1)$,主角可以选择走一步或跳跃。如果选择走一步,主角将移动到 $i+1$ 号踏板,得分不变。如果选择跳跃,主角将移动到 $i+K$ 号踏板,得分增加 $A[i]$。其中 $K$ 是预先设定的常数。游戏在主角到达 $N-1$ 号踏板的右侧时成功结束。也就是说,主角到达编号为 $N, N+1, \ldots$ 的踏板时,游戏结束——这些编号大于等于 $N$ 的踏板实际上不存在,但表示主角已经越过了 $N-1$ 号踏板。游戏的目标是通过合理控制主角的行动,使得分最大化并成功结束游戏。 喜欢网络直播的尚赫偶尔会玩 KOI 公司的跳跃游戏。虽然他自己玩得很开心,但观众们却反应平平。跳跃游戏不受欢迎的原因在于游戏非常困难且枯燥。首先,这款游戏的踏板数量可以多达 $10^{12}$ 个。其次,即使是 KOI 公司的优秀开发者也无法设计出如此多的踏板,因此他们采用了一种相对简单的方法来生成每个踏板。开发者们最初将所有 $A[i]$ 设置为 $0$,然后进行 $Q$ 次操作:对于每个 $j$ $(0 \leq j \leq Q-1)$,他们选择一个区间 $0 \leq L[j] \leq R[j] \leq N-1$,将 $A[L[j]], A[L[j]+1], A[L[j]+2], \ldots, A[R[j]]$ 的值增加 $1$。所有操作完成后的数组 $A$ 就是游戏中每个踏板跳跃时获得的得分。 你是一名制作计算机科学视频的创作者,决定制作一个关于如何以最高得分完成 KOI 公司的跳跃游戏的视频。你认为这个视频会在尚赫的观众中大受欢迎,但你担心游戏规模太大,难以找到高效的算法。克服所有困难,在给定的 5 小时内成为这款游戏的高手吧! 你需要实现以下函数: ```cpp long long play_game(long long N, int Q, long long K, std::vector L, std::vector R); ``` - `N`:游戏中存在的踏板数量。 - `Q`:开发者执行的操作次数。 - `K`:跳跃后到达的下一个踏板的编号。 - `L, R`:大小为 $Q$ 的整数数组。 - 该函数返回一个整数,表示跳跃游戏结束时可以获得的最高得分。 - 该函数在每个测试点中只会被调用一次。

输入格式

示例评测程序按以下格式读取输入: - 第 $1$ 行:$N\,Q\,K$ - 第 $2+i$ $(0 \leq i \leq Q-1)$ 行:$L[i]\,R[i]$

输出格式

示例评测程序按以下格式输出: - 第 $1$ 行:`play_game` 返回的值

说明/提示

对于所有输入数据,满足: - $1 \leq N \leq 10^{12}$ - $1 \leq Q \leq 2.5\cdot 10^5$ - $1 \leq K \leq N$ - 对于所有 $j$ $(0 \leq j \leq Q-1)$,$0 \leq L[j] \leq R[j] \leq N-1$ 详细子任务附加限制及分值如下表所示。 | 子任务 | 分值 | 附加限制 | | :-: | :-: | :-: | | $1$ | $6$ | $N \leq 2.5\cdot 10^5$ | | $2$ | $2$ | $K=1$ | | $3$ | $13$ | $2 K \geq N$| | $4$ | $15$ | $5 K \geq N$ | | $5$ | $16$ | $Q \leq 500$ | | $6$ | $7$ | $Q \leq 5000$ | | $7$ | $41$ | 无附加限制 |