QOJ.ac

QOJ

Límite de tiempo: 2.0 s Límite de memoria: 256 MB Puntuación total: 100 Hackeable ✓
Estadísticas

光写完代码是不够的,你还得修复三百个 Bug。

将光标放在代码中间某行的末尾。按下 RUL 方向键。现在重复多次。你学会了一个方便的导航技巧。

你吃过配蔓越莓酱的肉丸吗?Kostya 非常喜欢它们,尤其是在半夜做题的时候。事实上,他在电脑前吃得太多了:一些蔓越莓酱从罐子里滴了出来,弄坏了他的键盘。但他仍然必须完成这道题。而且,与他的键盘不同,他不想被卡住!

Kostya 使用的代码文件由 $n$ 行组成,行编号为 $1$ 到 $n$,其中第 $i$ 行包含 $s_i$ 个光标可能的位置,从 $(i, 1)$ 到 $(i, s_i)$,用 $(i, j)$ 表示第 $i$ 行的第 $j$ 个位置。

在某些按键损坏的情况下进行代码导航有点棘手。幸运的是,Kostya 的上(Up)和右(Right)方向键仍然可以正常工作:

  • 上 ($\uparrow$):如果光标位于位置 $(i, j)$,若 $i = 1$,则光标保持在原处;否则,它将移动到位置 $(i - 1, \min(j, s_{i-1}))$,其中 $s_{i-1}$ 是第 $i - 1$ 行的长度。
  • 右 ($\rightarrow$):如果光标位于位置 $(i, j)$,若 $j < s_i$,则光标移动到 $(i, j + 1)$;否则,它将移动到 $(i + 1, 1)$;特别地,当光标位于 $(n, s_n)$ 时,它将保持在原处。

Kostya 有一种特殊的技巧。他选择一个初始光标位置,并开始执行一个无限的按键序列:$u$ 次“上”,然后是 $r$ 次“右”,接着又是 $u$ 次“上”,然后是 $r$ 次“右”,依此类推。

例如,令 $n = 5$,$u = 2$,$r = 5$,且 $s = \{5, 2, 4, 3, 1\}$。从位置 $(4, 3)$ 开始,前几次按键将按如下方式移动光标:

$$(4, 3) \uparrow (3, 3) \uparrow (2, 2) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4) \rightarrow (4, 1) \dots$$

如果从某个位置开始并执行他的无限序列,Kostya 迟早会让光标到达第一行(即 $i=1$),则该位置被称为成功的(successful)。

你的任务是帮助 Kostya 计算他的代码中存在多少个成功的起始位置。

然而,他的代码还没有写完,所以你还需要处理 $q$ 次更新。在每次更新中,你会得到两个值 $pos$ 和 $x$,你需要将 $s_{pos}$ 赋值为新值 $x$。你需要在任何更新之前以及处理每次更新之后输出问题的答案。

输入格式

第一行包含三个整数:$n$、$u$ 和 $r$($1 \le n \le 10^5$,$1 \le u, r \le 10^{18}$)。

第二行包含 $n$ 个整数 $s_1, s_2, \dots, s_n$($1 \le s_i \le 10^{12}$):每行的位置数。

第三行包含一个整数 $q$($1 \le q \le 10^5$),表示更新的次数。

接下来的 $q$ 行,每行包含两个整数 $pos$ 和 $x$($1 \le pos \le n$,$1 \le x \le 10^{12}$),表示更新操作。

更新是累积的,即每次更新都应用到代码的当前状态,而不是初始状态。

输出格式

输出 $q + 1$ 个整数,每个整数占一行:分别表示所有更新之前以及每次更新之后成功起始位置的数量。

样例

输入样例 1

5 2 5
5 2 4 3 1
1
1 1

输出样例 1

15
11

输入样例 2

5 2 10
5 2 4 3 1
1
2 3

输出样例 2

11
12

输入样例 3

10 1 42
169 42 42 42 42 42 42 42 42 42
1
2 43

输出样例 3

211
254

说明

在第一个样例中,在进行任何更新之前,从位置 $(5, 1)$ 开始,循环按下“2 次上,然后 5 次右”:

第 1 轮:$(5, 1) \uparrow (4, 1) \uparrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4) \rightarrow (4, 1) \rightarrow (4, 2)$

第 2 轮:$(4, 2) \uparrow (3, 2) \uparrow (2, 2) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4) \rightarrow (4, 1)$

第 3 轮:$(4, 1) \uparrow (3, 1) \uparrow (2, 1) \rightarrow (2, 2) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4)$

第 4 轮:$(3, 4) \uparrow (2, 2) \uparrow (1, 2) \rightarrow \dots$

因此,$(5, 1)$ 是一个成功的起始位置。

在下图中,你可以看到每轮的起始位置用绿色圆点标记,最终位置用绿色星星标记。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.