主席树.
区间 $[L,R]$ 的答案可以表示成 $\prod_{i=L}^R A_i\cdot \prod \frac {p_i-1}{p_i}$ .
前者容易维护,后者就是所有在 $[L,R]$ 区间内出现过的质数的贡献,做法比较经典.
从前往后依次加入元素,加入 $A_i$ 时,枚举 $A_i$ 的所有质因子 $p$ ,在第 $i$ 棵线段树中给位置 $i$ 乘上 $\frac {i-1} i$ .
若 $p$ 在之前出现过,且最后一个出现的位置是 $lst$ ,则还要在第 $i$ 棵线段树中给位置 $lst$ 乘上 $\frac i {i-1}$ ,即消除贡献.
询问时,后面那个 $\prod \frac {p_i-1}{p_i}$ 就是在第 $R$ 棵线段树中询问区间 $[L,R]$ 的连乘积.
用主席树来维护,时间复杂度 $O(P+n\log n\log P)$ .
1 |
|