CF547C Mike and Foam

CF547C Mike and Foam

题目简述

一个序列 \(a\),初始为空,每次操作加入或删除一个数,每次操作后求

\[\sum_{i=1}^n\sum_{j=i+1}^n\bigl[\gcd(a_i,a_j)=1\bigr] \]

操作数 \(q\leq 2\times 10^5\),值域为 \(V=5\times 10^5\).

推导过程

上述式子其实和顺序无关,以下转换为常见形式:

\[\begin{align*} &\sum_{i=1}^n\sum_{j=i+1}^n\bigl[\gcd(a_i,a_j)=1\bigr] \\ =&\frac{1}{2}\left(\sum_{i=1}^n\sum_{j=i+1}^n\bigl[\gcd(a_i,a_j)=1\bigr]+\sum_{i=1}^n\sum_{j=1}^{i-1}\bigl[\gcd(a_i,a_j)=1\bigr]\right) \\ =&\frac{1}{2}\left(\sum_{i=1}^n\sum_{j=1}^n\bigl[\gcd(a_i,a_j)=1\bigr]-\sum_{i=1}^n\bigl[\gcd(a_i,a_i)=1\bigr]\right) \\ =&\frac{1}{2}\left(\sum_{i=1}^n\sum_{j=1}^n\bigl[\gcd(a_i,a_j)=1\bigr]-\sum_{i=1}^n[a_i=1]\right) \end{align*} \]

加入一个数 \(a_{n+1}\),考虑贡献:

\[\begin{align*} &\frac{1}{2}\left(\sum_{i=1}^{n+1}\sum_{j=1}^{n+1}\bigl[\gcd(a_i,a_j)=1\bigr]-\sum_{i=1}^{n+1}[a_i=1]\right)-\frac{1}{2}\left(\sum_{i=1}^n\sum_{j=1}^n\bigl[\gcd(a_i,a_j)=1\bigr]-\sum_{i=1}^n[a_i=1]\right) \\ =&\frac{1}{2}\left(\sum_{i=1}^{n+1}\sum_{j=1}^{n+1}\bigl[\gcd(a_i,a_j)=1\bigr]-\sum_{i=1}^n\sum_{j=1}^n\bigl[\gcd(a_i,a_j)=1\bigr]-\sum_{i=1}^{n+1}[a_i=1]+\sum_{i=1}^n[a_i=1]\right) \\ =&\frac{1}{2}\left(2\cdot\sum_{i=1}^{n+1}\bigl[\gcd(a_i,a_{n+1})=1\bigr]-\bigl[\gcd(a_{n+1},a_{n+1})=1\bigr]-[a_{n+1}=1]\right) \\ =&\frac{1}{2}\left(2\cdot\sum_{i=1}^n\bigl[\gcd(a_i,a_{n+1})=1\bigr]+2\cdot\bigl[\gcd(a_{n+1},a_{n+1})=1\bigr]-\bigl[\gcd(a_{n+1},a_{n+1})=1\bigr]-[a_{n+1}=1]\right) \\ =&\sum_{i=1}^n\bigl[\gcd(a_i,a_{n+1})=1\bigr] \\ =&\sum_{i=1}^n\sum_{x|a_i,\,x|a_{n+1}}\mu(x) \\ =&\sum_{x|a_{n+1}}\mu(x)\cdot\sum_{\substack{1\leq i\leq n\\[2pt]x|a_i}}1 \end{align*} \]

开一个桶 \(B\),令 \(B_x\) 表示数组 \(a\)\(x\) 的倍数的个数. 那么上述式子就变为了

\[\sum_{x|a_{n+1}}\mu(x)\cdot B(x) \]

每次加入一个数,就在桶中将它的所有因子处加 \(1\).

对于删除操作,我们把它看完将结果数组加上被删数,设要删除的数是 \(x\),那么在 \(B\) 中将其对应的因子处减一,然后按照上面的式子算出贡献,最后将目前答案减去贡献,就能得到结果数组的价值.

时间复杂度 \(O(q\log\tau(V))\).

posted on 2026-07-28 15:13  吴一鸣  阅读(12)  评论(0)    收藏  举报

导航