题解:P14009 「florr IO Round 1」数字游戏
zifeiwoye
·
·
题解
题目大意
给定序列 a,求:
\sum^{n}_{l=1} \sum^{n}_{r=l}\sum^{a_l}_{b_1=1}\sum^{a_{l+1}}_{b_2=1}\sum^{a_{l+2}}_{b_3=1}\dots\sum^{a_{r}}_{b_{r-l+1}=1} [\gcd(b_1,b_2,b_3,\dots,b_{r-l+1})=1]
其中,n 为序列 a 元素的个数。
思路
比较套路。
\begin{aligned}
&\ \ \ \ \ \sum^{n}_{l=1} \sum^{n}_{r=l}\sum^{a_l}_{b_1=1}\sum^{a_{l+1}}_{b_2=1}\sum^{a_{l+2}}_{b_3=1}\dots\sum^{a_{r}}_{b_{r-l+1}=1} [\gcd(b_1,b_2,b_3,\dots,b_{r-l+1})=1]\\
&=\sum^{n}_{l=1} \sum^{n}_{r=l}\sum^{a_l}_{b_1=1}\sum^{a_{l+1}}_{b_2=1}\sum^{a_{l+2}}_{b_3=1}\dots\sum^{a_{r}}_{b_{r-l+1}=1} \sum_{k \mid \gcd(b_1,b_2,b_3,\dots b_{r-l+1})}\mu(k)\\
&=\sum_{k=1}^{\max(a_1,a_2,a_3\dots,a_n)}\mu(k)\sum_{l=1}^{n}\sum_{r=l}^{n}\sum^{a_{l+1}}_{b_2=1}\sum^{a_{l+2}}_{b_3=1}\dots\sum^{a_{r}}_{b_{r-l+1}=1}\prod_{i=1}^{r-l+1}[k\mid b_i]\\
&=\sum_{k=1}^{\max(a_1,a_2,a_3\dots,a_n)}\mu(k)\sum_{l=1}^{n}\sum_{r=l}^{n}\prod_{i=l}^{r}\sum_{b_i=1}^{a_i}[k\mid b_i]\\
&=\sum_{k=1}^{\max(a_1,a_2,a_3\dots,a_n)}\mu(k)\sum_{l=1}^{n}\sum_{r=l}^{n}\prod_{i=l}^{r}\lfloor\frac{a_i}{k}\rfloor
\end{aligned}
下文设 V=\max(a_1,a_2,\dots,a_n)。
由上面式子,我们得到了一个 O(Vn^2) 的解法。
考虑类似于整除分块做法,\lfloor \frac{a_i}{k}\rfloor 只会改变 \sqrt{V} 次。总共修改 N\sqrt{V} 次。用线段树维护,有 O(n\sqrt{V}\log_2 n) 的做法。
但是线段树的常数非常大,不负众望的炸了。
考虑模仿替罪羊树:设置一个值 K,单次修改的次数大于 K 时暴力重构。此时 K=\lfloor\frac{3.5\times10^4}{3}\rfloor=11666 但是实测 K=5000 更优。
于是就过了本题。