分块算法
文章平均质量分 75
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
CodeForces 802G Periodic RMQ Problem(线段树+分块思想)
Educationnal CodeForces Round 20 G 果然是Educational,确实可以学到好多东西。 两种操作,区间赋值和询问区间最小,但是总区间是由k个长度为n的相同区间组成,如果直接用普通的线段树去做,很显然在空间上存不下,在时间上也无法接受。所以,很自然的要找一些规律。原创 2017-05-12 11:20:14 · 602 阅读 · 0 评论 -
WOJ 641 Events 区间分块
Input file: standard input Output file: standard output Time limit: 1 second Memory limit: 512 mebibytes Every year, the ACM/ICPC team will hold many contests, some of them are training while other原创 2017-04-12 13:40:38 · 357 阅读 · 0 评论 -
CodeForces 551E GukiZ and GukiZiana(分块算法)
事实证明,有些时候分块水不一定真的是水,它的水反而可以解决一些数据结构处理不了的问题。 这道题很明显的一道数据结构,大致题意:两种操作,一是区间修改,二是查询整个区间中等于某一个数字的值出现的最大位置差,如果不存在则输出-1。 第一个操作显然用线段树可以实现,然后关于第二个操作,我想起来之前有一道题目,转换到最后是找区间中第一个小于等于某一个数字x的位置。当时的话也是利用二分的思想。对于一个区间,我判断其最小值是否小于x,如果小于,那么说明答案可以在该区间内,又由于要是第一个原创 2017-12-01 11:43:21 · 364 阅读 · 0 评论 -
HDU 5663 Hillan and the girl(莫比乌斯反演+分块求和)
大致题意:给你两个数字n和m,让你求,其中f(i,j)表示gcd(i,j)是否为完全平方数,如果是则f(i,j)==0,否则为f(i,j)==1。首先,有了之前 BZOJ 2301 的经验,这道题目可以比较简单的讲。BZOJ 2301 这题是求一定范围内的两个数字gcd为1的组数。这题我直接在那个的基础上面讲。根据之前莫比乌斯反演的结果: 到这道题的话,最后结果就是:考虑交换求和次序: 到目前为止,我们这个式子即使用上分块求和优化,它的的复杂度是的,注意原创 2018-08-03 19:49:17 · 430 阅读 · 0 评论 -
HDU 6331 2018HDU多校赛 第三场 Walking Plan(最短路+矩阵优化+分块)
大致题意:给你一个含有不超过50个点的图,然后有q个询问,每次给出三个数字s、t和k,问从s出发走到t,至少需要经过k条边的最短路径是多少。非常厉害的一道题,曾经我以为自己对矩阵的所有用途已经很了解了,但是这次再一次让我发现自己真的还是太无知……首先,我们考虑最初状态的邻接矩阵的含义,f[i][j]表示从i走到j最近的一条边的长度,那么我们也可以看成是从i到j经过一条边的最短路。然后,如果考虑这个矩阵自己与自己进行矩阵“乘法”,这里打个引号因为这个乘法的含义不同于普通的矩阵乘法,具体来说,我们定义乘法为:,原创 2018-07-30 23:34:08 · 382 阅读 · 0 评论 -
计蒜客 2018ICPC徐州邀请赛D Persona5(组合计数 + 分块打表)
大致题意:有n个人,每个人有一个上界ai,每一次你可以使得没有达到上限的每一个人的数值加一。显然在Σai次之后,所有的人都达到了上界。现在问有多少种增加数值的方法。考虑每一个人对应增加的次数是ai,这ai次增加的相互顺序没有贡献,显然有公式: 但问题在于,这个n很大,对应这个Σai可以到1e12的级别,求和阶乘根本没有办法。说说自己的方法。注意到模数是1e9+7,意味着如果Σai大于1e9+7,那么最原创 2018-08-29 23:20:07 · 616 阅读 · 0 评论 -
计蒜客 ICPC沈阳网络赛 Ka Chang(树上分块 + 树状数组)
大致题意:给你一棵有根树,有两种操作,一是把某一层的所有的节点增加一个val,二是输出一个节点所在的子树的和。普通的dfs序可以支持子树查询,但是不能支持按照深度的修改。对于一个深度,修改一次的复杂度是klogn,k为这个神的的节点个数,可以看出,如果是一个类似菊花图的东西,时间复杂度会爆炸。然后为了解决菊花图下的复杂度问题,我们考虑在修改的时候知识对某一个深度打上一个标记,然后在查询的时候,遍历对应子树的所有深度,用对应深度的点的个数乘以深度的改变量即可。但是这样在遇到链的情况下,同样复杂度退化。于是我们原创 2018-09-09 11:08:16 · 281 阅读 · 0 评论 -
牛客练习赛30 F 小K种妹妹(树上分块)
大致题意,实现一种树状数据结构,包含修改权值,添加节点,删除边和查询子树内特定权值范围节点个数的操作。 虽然说是数据结构,而且有LCT这个东西可以考虑使用,但是分块作为一种非常快速的方法着实是赛场上的首选。树上的分块相对比较少见,本题可以作为树上分块的模板题。 树上分块与普通分块类似,只不过是要按照dfs序去分块。每次顺序dfs,把节点加入块中,当块的节点个数大于阈值,那么...原创 2018-11-09 00:01:46 · 210 阅读 · 0 评论 -
2019牛客多校赛 第五场 C generator 2(矩阵乘法 + 分块 + bsgs)
大致题意:给你一个很长的数列,然后这个数列递推公式是Xn = a * Xn-1 + b。问你在模p下,这个数列中,第一次出现v的位置是多少,如果不出现那么输出-1。 这个东西,你先尝试着用矩阵快速幂去做,然后你构造出矩阵,假设答案为x。之后你会发现,答案可以化简成一个通项公式。具体来说,我们设转移矩阵为A,那么A=[[a,b],[0,1]],然后A^x=[[a^x,b*(...原创 2019-08-01 22:29:12 · 324 阅读 · 0 评论