第十八次
A
图的遍历。
B
设 $i$ 怪最终被打了 $c_i|c_i\equiv a_i\pmod k$,则答案为 $\sum\limits_{i=1}^n\max(c_i-c_{i-1},0)$。
有结论:$\forall i,-k<c_i-c_{i-1}<k$。
(证明:若 $c_i-c_{i-1}\ge k$,那将 $c_i\gets c_i-k$ 满足结论,此时 $c_i-c_{i-1}$ 减少 $k$,而 $c_{i+1}-c_i$ 至多增加 $k$,不会变劣)
于是每个 $c_i-c_{i-1}$ 只会有两种取值 $A_i<0,B_i>0$,考虑对每一位选择 $A_i$ 或 $B_i$,
同时需要保证每段前缀选择的数之和(即为 $c_i$)非负。
从前往后依次选择,能选 $A_i$ 就选 $A_i$(贡献为 $0$),否则考虑:
- 选 $B_i$(贡献为 $B_i$),
- 把之前某个 $A_j$ 改成 $B_j$(贡献为 $B_j$),然后选 $A_i$。
堆维护之。
C
枚举 $\gcd\limits_{i\in S}a_i=k$,考虑对每个 $k$ 算 $\gcd\limits_{i\in S}a_i=k$ 的 $S$ 的个数 $f_k$。
$f_i$ 不好算,设 $g_k$ 表示 $k|\gcd\limits_{i\in S}a_i$ 的 $S$ 的个数,设 $s_i$ 表示原序列中 $i$ 的倍数的个数,
则 $g_k$ 等于从 $k$ 的倍数中任选非空子集的方案数,即 $g_k=2^{s_k}-1$。
设 $c_i$ 表示原序列中 $i$ 的出现次数,则 $s_i=\sum\limits_{i|d}c_d$,平凡狄利克雷后缀和。
而 $g_i=\sum\limits_{i|d}f_d$,求出 $g_i$ 后平凡狄利克雷后缀差分得到 $f_i$。
此时枚举 $\gcd\limits_{i\in S}a_i=k$,需要统计 $a_x\perp k$ 的 $x$ 的的个数 $h_k$。
设 $m=10^7$,直接推柿子:
$$ \begin{aligned} h_k&=\sum\limits_{i=1}^mc_i[\gcd(i,k)=1]\\ &=\sum\limits_{i=1}^mc_i\sum\limits_{d|\gcd(i,k)}\mu(d)\\ &=\sum\limits_{d|k}\mu(d)\sum\limits_{d|i}c_i\\ &=\sum\limits_{d|k}\mu(d)s_d \end{aligned} $$
把序列 $\mu(d)s_d$ 求出来,狄利克雷前缀和即可。

浙公网安备 33010602011771号