![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分块
「已注销」
这个作者很懒,什么都没留下…
展开
-
BZOJ 2818 Gcd + spoj 4491(莫比乌斯反演 分块)
思路:数据范围1e7,预处理出miu的前缀和,对于每个素数,反演式求 f(i)f(i) 分块,出结果。拓展:如果是多组样例,那么预处理F(i)F(i) 的系数,每次询问是sqrt(n)的复杂度查询。代码在下方。#include<stdio.h> #include <iostream> #include<string.h> #include<math.h> #include<algorithm> #d原创 2017-08-11 20:42:01 · 243 阅读 · 0 评论 -
BZOJ 2301 Problem b (莫比乌斯反演+区间容斥+分块)
思路:这个题算是bzoj 1695的加强版吧,同样是给你a,b,c,d,k五个数,只不过这次a和c都不一定是1了。那么我们需要进行区间的容斥定理(注意端点值)。同时由于数据量很大,我们还需要分块。容斥: fanyan(b,d)−fanyan(a−1,d)−fanyan(b,c−1)+fanyan(a−1,c−1)fanyan(b,d) - fanyan(a-1,d) - fanyan(b,c-1)原创 2017-08-11 20:22:32 · 211 阅读 · 0 评论 -
hdu 4746 Mophues (莫比乌斯反演 + 分块+线性筛)
注意:因为是多组询问(5000)而n又高达5e5,所以我们每次的时间一定要控制在logn或sqrt(n)内才能1s过,分块是必须的了。然后是一个坑点:必须在线性筛里统计数量,自己写函数一个个统计会t在这上。跟csu 1325的思路类似:需要预处理出 F(i)F(i) 的系数,然后求前缀和分块。然而这题p的值会影响某些F(i)F(i) 的系数,所以我们需要将不同的p值的前缀和分别保存下来。注意此题当p原创 2017-08-09 17:06:35 · 338 阅读 · 0 评论 -
BZOJ 2190 仪仗队 (莫比乌斯反演)
思路:从 (0,0)(0,0) 开始编号,构造一个n+1阶的矩阵,通过观察我们发现,从(0,0)(0,0) 点看去,点(4,6)(4,6) 一定被点(2,4)(2,4) 挡住了。我们发现,只有当gcd(i,j)==1gcd(i,j)==1 的点,才能被看到,所以,问题转化成了求(1,n)(1,n) 区间内,gcd(i,j)==1gcd(i,j)==1 的无序点对的个数。然后我们需要加上(0,1)(0原创 2017-08-11 20:56:58 · 281 阅读 · 0 评论 -
BZOJ 2005 能量采集(莫比乌斯反演+分块)
思路:跟bzoj 2190那题差不多。 在对gcd(i,j)==kgcd(i,j)==k的贡献做统计是分别对于每个k做统计就ok了,分块这种东西不是顺手就加上了吗。。#include<stdio.h> #include <iostream> #include<string.h> #include<math.h> #include<algorithm> #define eps 1e-8 typede原创 2017-08-11 21:05:57 · 161 阅读 · 0 评论 -
SPOJ 7001 Visible Lattice Points (莫比乌斯反演+分块)
思路:跟bzoj 2190差不多,这道题是那个的升级版,这个变成了三维的。 思路一模一样。 算完三维的,记得加上3个剩下的2维的平面上点的贡献就好。#include<stdio.h> #include <iostream> #include<string.h> #include<math.h> #include<algorithm> #define eps 1e-8 typedef long l原创 2017-08-11 21:09:47 · 234 阅读 · 0 评论 -
BZOJ 1257 余数之和sum (取模原理+分块)
思路:考虑取模的原理:k%n=k−k/i∗ik\%n = k - k/i * i 如果你对莫比乌斯反演中的分块很熟悉的话,那么你一眼就能看出来:k/i的值最多只有2*sqrt(k)个,所以我们只需sqrt(n)的时间就可以完成。而且i的前缀和也不需要预处理,直接公式就有了。#include<stdio.h> #include <iostream> #include<string.h> #inclu原创 2017-08-11 21:33:48 · 241 阅读 · 0 评论