神奇的姿势

题意 : 给你一个1-n的排列a,q个询问,每次询问一个区间内所有有序数对gcd的和。

----------------------------------此后一千里---------------------------------

考虑莫队,那么我们想要对加入一个数会有很高的代价,那我们能不能再每个数的因数时间内去完成这个动作呢?可以的。

我们维护另一个数列y,我们考虑已有一个数b,那么在那个数列上把所有b的因子i的位置加上t,我们想加入a,使得(sigma(i|a)y[i] ) = (gcd(a,b)=d)

如果i是大于d的因子无贡献,那么我们就是要找sigma(i|d) y[i] = d

而我们有一个公式 sigma(i|d) phi(i) = d

所以我们加上的t实际上就是phi(i),那么就可以在因数时间内去实现莫队的转移了。

实际上还有另一个东西,如果是让你求区间内互质数的对数,可以直接把t换成μ(i),一样的方法,没毛病。

原文地址:https://www.cnblogs.com/ihopenot/p/6482399.html