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))\).
浙公网安备 33010602011771号