#L3681. 「北大集训 2021」随机数据

    ID: 3118 传统题 1000ms 1024MiB 尝试: 16 已通过: 0 难度: 9 上传者: 标签>博弈论SG定理图结构图的遍历数据结构平衡树线段树数论欧几里得算法其他分治组合数学难度NOI/NOI+省选/NOI-

「北大集训 2021」随机数据

题目描述

nn 件物品,用 0,,n10, \cdots, n-1 对它们编号,规定物品 ii 的价值为 viv_i

AABB 正在轮流玩一个游戏,该游戏会进行多轮。

每轮开始时,如果所有可用的物品都已经被取走,游戏将立刻结束。否则,AA 必须选择一件未被取走的物品,将其取走。

假设 AA 取走的物品编号为 ii。接下来,BB 可以选择从物品 (id+n)modn(i - d + n) \bmod n 和物品 (i+d)modn(i + d) \bmod n 中选取一件未被取走的物品,将其取走;或者他可以选择跳过本次操作。随后游戏进入到下一轮。特别地,如果这两件物品都已经被取走了,BB 只能选择跳过本次操作。

AABB 都想最大化自己取走的物品的价值之和,我们假定 AABB 都采取了最优策略。

此外,在游戏开始前,有一些物品可能是不可用的。在游戏过程中,不可用的物品将会被忽略,即:AABB 都不能取走不可用的物品;当所有可用的物品都已经被取走时,游戏立刻结束。

初始时,所有物品都是可用的。你的程序需要支持 qq 次操作,每次操作的内容为:给定一个 xx,如果物品 xx 是不可用的,它将变为可用的;如果它是可用的,它将变为不可用的。每次操作后,你需要回答:假设从当前状态开始游戏,游戏结束时 BB 取走的物品的价值之和。

不幸的是,这是一道 IO 题,物品的数量可能会达到 101610^{16}。身为一个 OIer,你无法处理如此大规模的数据,因此 viv_i 将会用一种特殊的方法生成:给定一个长度为 mm 的数组 wwvi=wimodmv_i = w_{i \bmod m}


输入格式

输入的第一行包含四个正整数 n,d,m,qn, d, m, q,保证 1<n10161 < n \le 10^{16}, 1d<n1\le d < n, 1m2×1041 \le m \le 2\times 10^4, q105q \le 10^5

输入的第二行包含 mm 个整数,第 ii 个整数表示 wi1w_{i-1} 的值,保证 1wi4001 \le w_i \le 400

接下来的 qq 行,每行包含一个整数 xx,表示一次对物品 xx 的操作。保证 0x<n0 \le x < n


输出格式

输出 qq 行,每行一个整数,对应一次操作之后的答案。


样例 1

输入

5 2 3 2
1 3 2
1
1

输出

3
4

在这组样例中,v0=1v_0 = 1, v1=3v_1 = 3, v2=2v_2 = 2, v3=1v_3 = 1, v4=3v_4 = 3

在第一次操作后,物品 11 处于不可用状态。双方都采取最优策略进行游戏,最终 BB 取走的物品价值之和为 33

在第二次操作后,所有物品都处于可用状态。双方都采取最优策略进行游戏,最终 BB 取走的物品价值之和为 44


样例 2

输入

10 4 5 5
40 355 190 215 161
3
4
0
3
4

输出

581
460
420
541
702

样例 3

见附加文件中的 3.in3.ans


数据范围与提示

Subtask 1 (55 分) : n20n \le 20, q=1q = 1
Subtask 2 (1010 分) : n105n \le 10^5, q=1q = 1
Subtask 3 (1515 分) : n,q105n, q \le 10^5
Subtask 4 (3030 分) : q=1q = 1
Subtask 5 (4040 分) : 无特殊限制。

如有需要,可以使用 __int128 处理 long long 乘法取模,下面是一个使用 __int128 计算 a×bmodma \times b \bmod m 的例子:

long long a = 1e15;
long long b = 1e15;
long long m = 12345678910;
long long c = ((__int128) a * b) % m;