![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
块状结构
文章平均质量分 67
荼白777
这个作者很懒,什么都没留下…
展开
-
基础莫队例题
引入 看了很多篇解释,我个人理解是莫队是优化后的双指针算法; 比如说我们现在要维护区间内数字出现的次数; 从[A,B][A,B][A,B]区间转移到[C,D][C,D][C,D]区间; 对于BBB到DDD的过程,就是不断的新增数字,如果这个数字的种类是第一次出现,那么就++ans; 对于AAA到CCC的过程,就是不断的减少数字,如果这个数字出现的次数已经归零了,那么就--ans; 以上的转移可以做到 但是现在我们的询问是乱序的,那么我们可以将所有的询问存下来,并且排个序; 为了使得时间复杂度降低到O原创 2021-11-16 22:34:27 · 632 阅读 · 0 评论 -
整除分块模板
具体解释看这篇博客 例题见这的D1 板子 整除分块是快速求∑i=1n⌊ni⌋\sum_{i=1}^n \lfloor \frac{n}{i}\rfloor∑i=1n⌊in⌋ 因为整除的值是连续的,只需要算出左右区间就可以快速求和; 算法时间复杂度 O(n)O(\sqrt{n})O(n) int ans=0; for(int l=1,r;l<=n;l=r+1){ r=n/(n/l); ans+=(r-l+1)*(n/l); } printf("%d\n",ans); ...原创 2021-09-10 23:43:18 · 87 阅读 · 0 评论 -
分块基本思想与例题
引入 分块的基本思想是将一个长度为nnn的段,分成n\sqrt{n}n个块,每个块的长度为n\sqrt{n}n 主要思想是大段维护、小段朴素; 说白了就是对于一个块来说,我们维护总体;而对于零散的点,我们直接暴力就行; 分块的时间复杂度一般是O(nn)O(n\sqrt{n})O(nn),比线段树、树状数组的O(nlogn)O(nlogn)O(nlogn)是慢的; 但是线段树、树状数组再维护不满足区间可加、可减性的信息是比较麻烦的; 例题 一个简单的整数问题2 题面 传送门 思路 这题需要区间加、原创 2021-11-15 21:52:21 · 710 阅读 · 0 评论