数学总结 2(数论函数、狄利克雷卷积、反演相关)
零、前言 & 目录
本文结构较为混乱,因为实在找不到一种类似于拓扑的高效学习方式。
不是莫反这玩意儿为什么不是 DAG 啊 /fn
说实话,莫反板块的 Easy Version 和 Hard Version 几乎是同一个东西。
- 整除分块
- 积性函数
- 筛法
- 莫比乌斯反演(Easy Version)
- 狄利克雷卷积(Dirichlet)
- 莫比乌斯反演(Hard Version)
- 欧拉反演
一、整除分块
\(\{\lfloor \frac{n}{1} \rfloor, \lfloor \frac{n}{2} \rfloor, \dots, \lfloor \frac{n}{n} \rfloor, \dots\}\) 的元素种类一定是 \(O(\sqrt{n})\) 级别的。
证:
- 对于 \(i \leq \sqrt{n}\),最多只有 \(\sqrt{n}\) 种。
- 对于 \(i \gt \sqrt{n}\),都有 \(\lfloor \frac{n}{i} \rfloor \leq \sqrt{n}\),因此也只有 \(\sqrt{n}\) 种。
- 对于 \(i \gt n\),都有 \(\lfloor \frac{n}{i} \rfloor = 0\),只有一种。
可以利用这个性质做一些美妙的优化。
假设我们已经知道 \(t = \lfloor \frac{n}{l} \rfloor\),想要求出极大的 \(r\) 使得 \(\lfloor \frac{n}{r} \rfloor = t\)。
事实上 \(r = \lfloor \frac{n}{\lfloor \frac{n}{l} \rfloor} \rfloor\)。
整除分块例 1:洛谷 P2261 CQOI2007 余数求和。略微转化一下就是整除分块板子了。
整除分块例 2:P2260 清华集训 2012 模积和。\(\color{red}{Sol}\).
二、积性函数
先定义数论函数表示定义域为正整数的函数。
当 \(\gcd(a,b) = 1\) 时,若有 \(f(ab) = f(a) \times f(b)\),则 \(f\) 是积性函数。
若没有 \(\gcd\) 的限制,即对于任意正整数 \(a,b\) 都有 \(f(ab) = f(a) \times f(b)\),则称 \(f\) 为完全积性函数。
常见的积性函数
常数函数 \(I\)
定义 \(I(n) = 1\),这显然是完全积性函数。
单位函数 \(\epsilon\)
定义 \(\epsilon(n) = [n = 1]\),这显然是完全积性函数。
因子个数 \(d\)
对于质数幂,有 \(d(p^\alpha) = \alpha + 1\)。
对于任意 \(m = \prod\limits_{i=1}^{k} p_i^{\alpha_i}\),有 \(d(m) = \prod\limits_{i=1}^{k} d(p_i^{\alpha_i}) = \prod\limits_{i=1}^{k} (\alpha_i + 1)\)。
由此因子个数显然是积性函数。
因子之和 \(\sigma\)
对于质数幂,有 \(\sigma(p^\alpha) = 1 + p + p^2 + \dots + p^\alpha = \frac{p^{\alpha + 1} - 1}{p - 1}\)。
这东西分配律一下也是积性函数。
莫比乌斯函数 \(\mu\)
(莫比乌斯函数的定义在后面)
对于质数幂,\(\mu(p^\alpha)\):
- 若 \(\alpha = 0\) 则 \(\mu = 1\)。
- 若 \(\alpha = 1\) 则 \(\mu = -1\)。
- 若 \(\alpha \gt 1\) 则 \(\mu = 0\)。
对于任意 \(m = \prod\limits_{i=1}^{k} p_i^{\alpha_i}\):
- 只要有一个质数幂因子包含平方,那么整个 \(m\) 的 \(\mu\) 就是 \(0\)。
- 否则有几种质因子它就是 \(-1\) 的几次方,因为质因子之间互相独立。
通过定义得到 \(\mu\) 是积性函数。
欧拉函数 \(\varphi\)
对于质数幂,有 \(\varphi(p^\alpha) = p^\alpha - \frac{p-1}{p}\)。
类比因子个数,这也是积性函数。
三、筛法
首先这些函数可以通过定义直接计算。
然后对于上述有特殊性质的积性函数,如何优化?
埃氏筛法
由于积性函数的性质类似于因子和倍数之间的关系,所以可以类比筛质数,直接暴力枚举倍数更新对应的函数值。
复杂度是 \(O(n \log \log n)\),有很多优化空间,详见 OI-Wiki。
线性筛法
类比线性筛质数,每个数只会被最小质因子筛掉,所以复杂度是线性的。
for (int i = 2; i <= n; i++) {
if (!st[i]) pr[++tot] = i;
for (int j = 1; j <= tot && i * pr[j] <= n; i++) {
st[i * pr[j]] = 1;
if (i % pr[j] == 0) break;
}
}
对于积性函数,可以直接在筛法过程中计算函数值。
即在 \(i\) 的基础上添加最小质因子 \(pr_j\) 的贡献,通过 \(i\) 的函数值和加入 \(pr_j\) 后的变化量计算 \(i \times pr_j\) 的函数值。
注意对于积性函数 \(f\),有 \(f(1) = f(1) \times f(1), f(i) = f(1) \times f(i)\),因此一定有 \(f(1) = 1\),代码实现要注意。
线性筛莫比乌斯函数 \(\mu\)
mu[1] = 1;
for (int i = 2; i <= n; i++) {
if (!st[i]) pr[++tot] = i, mu[i] = -1;
for (int j = 1; j <= tot && i * pr[j] <= n; i++) {
st[i * pr[j]] = 1;
if (i % pr[j] == 0) { mu[i * pr[j]] = 0; break; }
mu[i * pr[j]] = -mu[i];
}
}
线性筛欧拉函数 \(\varphi\)
phi[1] = 1;
for (int i = 2; i <= n; i++) {
if (!st[i]) pr[++tot] = i, phi[i] = i - 1;
for (int j = 1; j <= tot && i * pr[j] <= n; i++) {
st[i * pr[j]] = 1;
if (i % pr[j] == 0) { phi[i * pr[j]] = phi[i] * pr[j]; break; }
phi[i * pr[j]] = phi[i] * (pr[j] - 1);
}
}
四、莫比乌斯反演(Easy Version)
$$\Large\rightarrow \color{red}{远古莫反题解合集}\leftarrow$$
好的你被骗了上面那个题解合集里面并不全是莫反。
远古题解合集写的确实很丑,好像还有一堆公式错误,懒得改了弃坑。
莫比乌斯函数 & 引入
定义莫比乌斯函数 \(\mu(i)\):
- 若 \(i\) 存在平方因子,则 \(\mu(i) = 0\)。
- 否则设 \(i\) 质因数分解为 \(p_1 p_2 \dots p_k\),则 \(\mu(i) = (-1)^k\)。
假设现在要解决这样的问题:\(i,j \in [1,n]\),求 \(\gcd(i,j) = 1\) 的二元组 \((i,j)\) 数量。
一种做法是钦定 \(i \gt j\),则 \(\gcd(i,j)=1\) 相当于 \(i\) 以内和 \(i\) 互质的数的数量,即 \(\varphi(i)\)。
考虑另一种思想:用容斥解决该问题。
考虑用总数减去 \(\gcd\) 不为 \(1\) 的。给 \(\gcd\) 也做一个类似于质因数分解的事情,即只在质因数层面统计它。
总数为 \(n^2\),然后减掉同时有因子 \(2\) 的对数、同时有因子 \(3\) 的对数、同时有因子 \(5\) 的对数、……,加上同时有因子 \(2,3\) 的对数、加上同时有因子 \(2,5\) 的对数、加上同时有因子 \(3,5\) 的对数、……减去同时有因子 \(2,3,5\) 的对数……
考虑暴力做法是枚举 \((i,j)\),查它的 \(\gcd\) 是否为 \(1\),现在反向思考:枚举公因数去看有多少对 \((i,j)\) 满足条件,再容斥。
不难发现假设这个公因数有 \(k\) 个质因子,则容斥系数就是 \((-1)^k\)。
如果它存在平方质因子,那么容斥系数就是 \(0\)。
这和莫比乌斯函数是等价的。
那么之前问题的答案就是:\(\sum\limits_{i=1}^{n} \sum\limits_{i ~|~ x}^{x \leq n} \sum\limits_{i ~|~ y}^{y \leq n} \mu(i)\),也就是直接求有多少个倍数。
即:\(\sum\limits_{i=1}^{n} \lfloor \frac{n}{i} \rfloor ^2 \times \mu(i)\)。
事实上 Easy Version 就是容斥。
例 1:洛谷 P2158 SDOI2008 仪仗队
有 \(N \times N\) 个人,排列成正方形。
现在求站在左下角,能看到多少人。
和之前的问题是一样的,如果把自己的位置看作 \((0,0)\),那么最后再加上 \((0,1), (1,0)\) 两个位置即可。
例 2:洛谷 P3455 POI 2007 ZAP-Queries
给出 \(a,b,d\),求满足 \(1 \leq x \leq a\),\(1 \leq y \leq b\),且 \(\gcd(x,y)=d\) 的二元组 \((x,y)\) 的数量。
类似于上面那题,\(\gcd(x,y) = d\) 先化为 \(\gcd(x,y) = 1\),即上界都 \(\div d\) 之后再计算。
转化之后大致是类似这样的式子:\(\sum\limits_{t=1}^{a} \lfloor \frac{a}{t} \rfloor \lfloor \frac{b}{t} \rfloor \mu(t)\)。
这题有多测,考虑如何优化?
看上去前面很像整除分块的形式,所以考虑把 \(\mu\) 内的变成一段连续的取值,可以前缀和优化,即让它们前面的除法系数相同。
然后对前面那玩意儿做整除分块就行了,由于两个分块都是 \(O(\sqrt{n})\) 级别的,所以重叠在一起还是 \(O(\sqrt{n})\) 级别。
例 3:CF803F Coprime Subsequences
给定长度为 \(n\) 的数组 \(a\),求满足如下条件的 \(a\) 的子序列个数:
子序列内所有数的 \(\gcd\) 为 \(1\)。
这也可以容斥。
具体地,用总数减去子序列都是 \(2\) 的倍数,减去都是 \(3\) 的倍数,减去都是 \(5\) 的倍数,加上都是 \(2 \times 3\) 的倍数……
又回到容斥了:\(\sum\limits_{d=1}^{v} \mu(d) \times (2^{cnt_d} - 1)\),其中 \(cnt_d\) 表示 \(d\) 的倍数的数量。
由于不能为空,所以要 \(-1\)。
例 4:CF547C Mike and Foam
给定一个长度为 \(n\) 的数列 \(a\),初始每个位置都没有标记。
每次操作对一个位置的标记状态取反,并询问操作之后所有有标记的位置的集合,有多少个数对 \((i,j)\) 满足 \(\gcd(a_i, a_j) = 1\)。
有点板。
这种题类似于 AT_AGC038_c(这也是一道不错的练手题),大致思路是把二维枚举通过一些转化变成一维枚举的平方。
具体地,令 \(v\) 表示值域上界,令 \(cnt_i\) 表示 \(i\) 的出现次数(打标记算出现):
\(\sum\limits_{i=1}^{v} \sum\limits_{j=1}^{v} [\gcd(i,j)=1] \times cnt_i \times cnt_j\)
\(\sum\limits_{i=1}^{v} \sum\limits_{j=1}^{v} \times cnt_i \times cnt_j \sum\limits_{d ~|~ i, d ~|~ j} \mu(d)\)
\(\sum\limits_{d=1}^{v} \mu(d) \sum\limits_{i=1}^{\lfloor \frac{v}{d} \rfloor} \sum\limits_{j=1}^{\lfloor \frac{v}{d} \rfloor} cnt_{id} \times cnt_{jd}\)
\(\sum\limits_{d=1}^{v} \mu(d) \Big( \sum\limits_{i=1}^{\lfloor \frac{v}{d} \rfloor} cnt_{id} \Big) ^2\)
\(\sum\limits_{d=1}^{v} \mu(d) \Big( \sum\limits_{d | i}^{v} cnt_{i} \Big) ^2\)
由于因子个数是调和级数级别,所以直接暴力维护所有因子对应的平方权值即可。
例 5:CF900D Unusual Sequences
有一个 \(\gcd = x\) 看着就很难受,不妨把它先转化为 \(\gcd = 1\),总和为 \(\frac{y}{x}\)。
有 \(\gcd = 1\) 看着很莫反啊!但是先别急着上 \(\mu\) 函数。
观察一下,设 \(f(n)\) 表示总和为 \(n\),且 \(\gcd = 1\) 的方案数。
莫反的本质是容斥,那就先试试容斥:用总数 \(2^{n-1}\) 减去 \(\gcd\) 不为 \(1\) 的方案数。
怎么暴力怎么来,枚举 \(n\) 的所有因数直接变成子问题求,即 \(f(n) = 2^{n-1} - \sum\limits_{d ~|~ n} f(d)\)。
这样做看上去很蠢,但实际上它是对的。
加个记忆化它只会访问 \(\frac{y}{x}\) 的所有因子,这哪里有不对的道理。
例 6:
求有多少序列 \(a\) 满足:
- \(l_i \leq a_i \leq r_i\)。
- \(\sum a_i \leq m\)。
- \(\gcd a_i = 1\)。
整体思路类似于上一题,也是转化为子问题再做。
首先这个 \(\gcd = 1\) 看上去很莫反,然而这种计数题又不能强行莫反,相反地它长得还有点像 DP。
然而直接硬 DP 显然不好设计状态,所以考虑套一个容斥再去 DP:即用总数减去 \(\gcd \gt 1\) 的方案数。
后面 \(\gcd \gt 1\) 的方案数怎么做?其实是子问题:
\(\gcd = d \Rightarrow l'_i \leftarrow \lceil \frac{l_i}{d} \rceil, r'_i \leftarrow \lfloor \frac{r_i}{d} \rfloor, m' \leftarrow \lfloor \frac{m}{d} \rfloor\)。
然后转化为 \(\gcd = 1\) 的子问题继续递归求解。
那问题在于总数要怎么求?事实上这一个简单的 DP,设 \(f_{i,j}\) 表示前 \(i\) 个位置总和为 \(j\) 的方案数,前缀和优化转移即可做到 \(O(\frac{nm}{d})\)。
写递归被卡常了,毕竟常数确实很大。
那就求出 \(\mu\) 直接枚举 \(d\),乘上对应容斥系数就行了。
看似复杂度很高,实际 \(\sum\limits_{d=1}^{m} \frac{nm}{d} = nm\sum\limits_{d=1}^{m} \frac{1}{d}\),这是调和级数级别,可以接受。
五、狄利克雷卷积(Dirichlet)
有两个数论函数 \(f,g\),令 \(h = f * g\)。
\[h(n) = \sum\limits_{d | n} f(d) g(\frac{n}{d}) \]称之为狄利克雷卷积(Dirichlet)。
一些简单卷积
假设 \(f(n) = 1, g(n) = 1, h = f * g\),则有 \(h(n) = \sum\limits_{d | n} 1 \times 1\),即 \(h\) 为因子个数函数。
假设 \(f(n) = 1, g(n) = n, h = f * g\),则有 \(h(n) = \sum\limits_{d | n} 1 \times n\),即 \(h\) 为因子之和函数。
假设 \(f(n)\) 任意,\(g(n) = [n = 1]\) 即 \(g\) 为单位函数,\(h = f * g\),则有 \(h(n) = \sum\limits_{d | n} f(d) \times [\frac{n}{d} = 1]\),即 \(h(n) = f(n)\)。
性质
显然卷积是满足交换律的,有 \(f * g = g * f\),由定义可得。
卷积还满足结合律,即 \((f * g) * h = f * (g * h)\)。
注意迪利克雷卷积的另一种写法:\(h(n) = \sum\limits_{d_1d_2 = n} f(d_1) g(d_2)\)。
那这里相当于是把 \(n\) 分成三部分:\(n=d_1d_2d_3\),再扔回上面那个式子里面显然是满足结合律的。
另外若 \(f,g\) 都是积性函数,那么 \(h\) 也是积性函数。即两个积性函数的卷积仍然是积性函数。
六、莫比乌斯反演(Hard Version)
一般形式 & 性质
事实上前两个也是类似于容斥的东西,列举一下容斥系数就是 \(\mu\):

然而第三个式子为什么是对的?
考虑把 \(\mu\) 做一个狄利克雷卷积:\(\mu * I = \epsilon\)。
翻译成人话:\(\sum\limits_{d | n} \mu(d) = [n = 1]\),也就是第三个式子。
证明的话只需要考虑指数幂处的取值即可。
顺便证一下第一个式子:
\(F(x) = \sum\limits_{d ~|~ x} f(d)\),即 \(F = f * I\)。
那等式两边同时卷上一个 \(\mu\) 等式显然成立:\(F * \mu = f * I * \mu\)。
根据结合律,\(F * \mu = f * (I * \mu)\),然而第三个式子证过 \(I * \mu = \epsilon\),所以 \(F * \mu = f * \epsilon\)。
又因为之前在狄利克雷卷积那里证过:
假设 \(f(n)\) 任意,\(g(n) = [n = 1]\) 即 \(g\) 为单位函数,\(h = f * g\),则有 \(h(n) = \sum\limits_{d | n} f(d) \times [\frac{n}{d} = 1]\),即 \(h(n) = f(n)\)。
所以 \(F * \mu = f\),即 \(f(x) = \sum\limits_{d ~|~ x} \mu(d) F(\frac{x}{d})\)。
把莫比乌斯反演写成狄利克雷卷积的形式:\(F = f * I \Rightarrow f = F * \mu\)。
常见问题
给定函数 \(f\),计算 \(\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} f(\gcd(i,j))\)。
对于 \(f(n) = [n=1]\) 就是互质情况,这种特殊问题之前已经处理过了,考虑用狄利克雷卷积解决它。
设 \(f(n) = \sum\limits_{d ~|~ n} g(n)\)。
则问题变成计算 \(\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{d ~|~ \gcd(i,j)} g(d)\)。
改为枚举 \(d\) 再计算:\(\sum\limits_{d=1}^{\min(n,m)} g(d) \lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor\)。
对于 \(f(n) = [n=1]\) 的特殊情况,相当于 \(\epsilon = g * I\),由之前推导可得 \(g = \mu\)。
例 2:洛谷 P3455 POI 2007 ZAP-Queries
给出 \(a,b,d\),求满足 \(1 \leq x \leq a\),\(1 \leq y \leq b\),且 \(\gcd(x,y)=d\) 的二元组 \((x,y)\) 的数量。
一种做法是上界除以 \(d\) 下取整,然后转化为 \(\gcd = 1\) 的问题欧拉反演。
学完迪利克雷卷积,考虑再从反演的更高维层面思考这个问题,虽然最后得到的结果都是一样的。
为什么要莫反?因为需要通过容斥把问题转化为可以快速计算或更简洁的形式。
设 \(f(d) = \sum\limits_{i=1}^{a} \sum\limits_{j=1}^{b} [\gcd(i,j) == d]\),这并不好求。
由于莫反本质上是因子与倍数的关系,考虑往因子转化还是往倍数转化。
往因子转化看上去比较地神秘,又变成了一大坨子问题,还是解决不了。
但是往倍数转化:设 \(g(n) = \sum\limits_{n ~|~ d} f(d) = \sum\limits_{n ~|~ d} \sum\limits_{i=1}^{a} \sum\limits_{j=1}^{b} [\gcd(i,j) == d]\),由于 \(i,j\) 都是 \(d\) 的倍数,因此它们也一定都是 \(n\) 的倍数。
所以 \(g(n) = \lfloor \frac{a}{n} \rfloor \lfloor \frac{b}{n} \rfloor\)。
然后根据莫反的一般形式把 \(f\) 往里面扔:\(f(d) = \sum\limits_{d ~|~ t} \mu(\frac{t}{d}) \lfloor \frac{a}{t} \rfloor \lfloor \frac{b}{t} \rfloor\)。
改为枚举 \(T=\frac{t}{d}\),式子变为:\(\sum\limits_{T=1}^{\lfloor \frac{\min(a,b)}{d} \rfloor} \mu(T) \lfloor \frac{a}{Td} \rfloor \lfloor \frac{a}{Td} \rfloor\)。
优化就和之前一样了,整除分块前缀和。
例 7:洛谷 P2398 GCD SUM
求 \(\sum_{i=1}^n \sum_{j=1}^n \gcd(i, j)\)。
看到 \(\gcd\) 求和,很难啊!直接把贡献拆出来改成计数:\(\sum\limits_{d} d \times \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} [\gcd(i,j) = d]\)。
然后就做完了,后面那坨就是之前已经解决的问题。
例 8:洛谷 P2257 YY 的 GCD
给定 \(N, M\),求 \(1 \leq x \leq N\),\(1 \leq y \leq M\) 且 \(\gcd(x, y)\) 为质数的 \((x, y)\) 有多少对。
如果用前两种转化好像挺难优化复杂度。
考虑第三种形式:\(\sum\limits_{d | x} \mu(d) = [x = 1]\)。
改成枚举 \(d\):
现在貌似并不能再优化了?
瓶颈在于多测,而每一次多测都要重新算一遍贡献。
那能否转化成预处理的形式?
令 \(T = dp\),改为枚举 \(T\):
后面的 \(\sum\limits_{p ~|~ T, p \in prime} \mu(\frac{T}{p})\) 就和询问 \(n,m\) 完全无关了,可以预处理。
对于前面 \(\lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor\) 可以直接数论分块,后面的预处理加一层前缀和即可。
更多的例题还是看之前写的吧,专题太多了忙不过来,没时间再写一遍题解了。
$$\Large\Rightarrow \color{red}{远古莫反题解合集}\Leftarrow$$
七、欧拉反演
直接给出结论:
比较玄幻了,狄利克雷卷积其实可以把 \(\mu\) 和 \(\varphi\) 这俩玩意儿联系起来。
考虑 \(f(n) = n, g(n) = \mu(n)\),且 \(h = f * g\),求 \(h\) 是什么函数。
即 \(f\) 是 \(id\),\(g = \mu\),有 \(h = id * \mu\)。
由于 \(id,\mu\) 都是积性函数,只需要考虑在素数幂处的取值,因为它们卷起来还是积性函数。
卷起来就是 \(h(p^\alpha) = \sum\limits_{d ~|~ p^\alpha} d \mu(\frac{p^\alpha}{d})\)。
当 \(d = p^\alpha\),算出来是 \(p^\alpha\);当 \(d = p^{\alpha - 1}\),算出来是 \(-p^{\alpha - 1}\);其余情况由于 \(\mu\) 包含至少两个质因子,都是 \(0\)。
所以这东西卷起来就是 \(p^\alpha - p^{\alpha - 1}\),事实上是 \(\varphi\) 欧拉函数。
于是有:
然后和推导莫比乌斯反演类似地,两边同时卷一个 \(I\),运用结合律,由于 \(\mu * I = \epsilon\),且任何函数卷 \(\epsilon\) 都是它本身:
这是一个很牛的事情,翻译成人话就是:\(n = \sum\limits_{d ~|~ n} \varphi(d)\),即欧拉反演。
例 9:ARC185E Adjacent GCD
首先不难一眼看出拆贡献,计算每一个二元组 \((i,j)\) 被计算了多少次。
然后这显然是 \(2^{i-1} \times 2^{n-j} = 2^{n+i-j-1}\),即 \(\sum\limits_{i=1}^{n} \sum\limits_{j=i+1}^{n} \gcd(a_i, a_j) 2^{n+i-j-1}\)。
题目要求求出所有前缀的答案,这启发我们增量,计算新加一个数 \(a_n\) 的贡献。
由于后面有 \(2^{n}\) 这一项,所以当 \(n \leftarrow n+1\) 的时候之前的答案都要 \(\times 2\)。
然后考虑新的数对 \((i,n)\) 的贡献(接下来钦定 \(a_n = m\)):
即 \(\sum\limits_{i=1}^{n-1} \gcd(a_i, m) \times 2^{i-1}\)。
事实上我试了一下莫反,但是推了半天之后发现推成欧拉反演了。
那就用欧拉反演吧,把 \(\gcd\) 化掉:\(\sum\limits_{i=1}^{n-1} 2^{i-1} \sum\limits_{d ~|~ a_i, d ~|~ m} \varphi(d)\)。
都写到这一步了,显然要把 \(d\) 提到前面:\(\sum\limits_{d ~|~ m} \varphi(d) \sum\limits_{i=1}^{n-1} [d ~|~ a_i] 2^{i-1}\)。
接下来就和例 5 很像了。直接遍历所有因子暴力修改贡献即可,这是不难维护的。


浙公网安备 33010602011771号