简单数学推导与数据结构的结合

jys posted @ May 14, 2014 08:43:39 PM in 未分类 , 877 阅读

http://cdqz.openjudge.cn/2015/1050/

考虑一个数组A[1..n],求:sigma(i,j=1..n:gcd(A[i],A[j]))=sigma(i,j=1..n:sigma(d|A[i]&&d|A[j]:μ(d)))=sigma(d=1..n:μ(d)*cnt[d]*cnt[d]),其中cnt[i]表示A[]数组中i的倍数的数的个数

考虑莫队算法

问题变成加/减一个数,同时维护答案

考虑到这里的d只能是新加进的数A[t]的因子,再配合cnt和预处理的μ数组可以搞

10000以内的数最多只有64个因子,所以是O(64msqrt(n))的效率

别人的题解:http://www.cnblogs.com/oldmanren/p/3661936.html

看不太懂,不知道是不是这意思

有这个方法的话就可以搞一些莫名其妙让人第一眼摸不着头脑的区间询问题了


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter