分块
文章平均质量分 52
u010290366
这个作者很懒,什么都没留下…
展开
-
250. 磁力块
题目链接:250. 磁力块算法分析先按照质量排序,然后分块,在每块内再按照距离排序。每块大小n\sqrt nn。计算出一个k,满足[1,k]块内的每个磁石的质量都小于等于队头的磁石的磁力。最坏的情况下,会换nnn次磁石,总共会有nnn块磁石入队,因此均摊时间复杂度是O(1),暴力计算第k+1k+1k+1块的时候,复杂度是O(n)O(\sqrt n)O(n)。因此,总复杂度是O(n∗n)O(n*\sqrt n)O(n∗n)。在计算kkk的时候,可以优化。存下每块内磁石的最大质量,因为之前是排序的,原创 2021-03-30 19:29:56 · 649 阅读 · 0 评论 -
249. 蒲公英
题目链接:249. 蒲公英算法分析进阶指南上算法描述已经很清晰了。这里是用vector维护的每个数在序列中出现的下标。假设总共T块,预处理出每两个块之间的最小众数,需要时间O(nT)。m个查询小块内每个数的出现次数为O(mn/T*logn),总体时间复杂度为两者之和。根据均值不等式,如果时间复杂度最低,应满足nT=mn/TlognnT=mn/TlognnT=mn/Tlogn,求得T=nlognT=\sqrt {nlogn}T=nlogn,这里面n<=40000,求得T约等于52。因此:blo原创 2021-03-23 17:40:31 · 204 阅读 · 0 评论 -
小Z的袜子
题目链接:251. 小Z的袜子算法分析这道题目是典型的离线分块问题。由于只有询问,没有修改,我们可以将询问进行分块。先按照左端点进行排序,然后分成n\sqrt nn块,在每一块内,再按照右端点由小到大排序。这里的分块指的是对应到原始的序列上分块,询问对应到不同的块内。第一个询问可以暴力求出,之后的每个询问都在它前面的询问基础上修改。对于每个块内,是按照右端点由小到大排序的,左端点多出一部分或者少一部分,但是不会超过n\sqrt nn,一个块内的询问最多是n\sqrt nn,所有的右端点因为是单调原创 2021-03-18 19:22:32 · 90 阅读 · 0 评论 -
分块
分块入门hzwer 分块分块扩展:莫队题目参考上面博客中的题目。文章比较系统,有入门有扩展,所附题目质量高。原创 2021-03-09 17:01:38 · 56 阅读 · 0 评论