数列分块入门
pre
分块最关键的思想就是把散块和整块合起来。
1
熟悉一下分块基本操作。考虑修改时对于整块记录 addtag,查询本身的值加上所在块的 tag 即可。https://loj.ac/s/2268096
2
初见端倪。但是信息还是可以区间合并,对于整块块还是记录 addtag,散块暴力(记得加上 tag 的影响!),查询整块块时二分 x-tag 即可。https://loj.ac/s/2268105
3
诈骗。修改同 2,散块还是可以暴力找最大的,整块同 2,注意特判整块内没有的情况。https://loj.ac/s/2268119
4
简单。记整块和,addtag 即可。https://loj.ac/s/2268131
5
经典势能分析,做过就没什么好说的了。考虑记个块内最大值,如果小于等于 1 就不做了,否则暴力改就行。https://loj.ac/s/2268143
6
分块思想的运用,如果某个块的大小大于 \(2B\),那就重新分块使块的大小较为均匀。https://loj.ac/s/2268461
7
回顾 4,其实是一个类似标记永久化的想法,但是这个题就不太好使了,考虑修改散块时把标记直接下传来暴力计算,单点查询所以整块记个 tag 即可。https://loj.ac/s/2268603
8
看起来困难实际还是板。考虑对于整块记录 coltag,coltag 只有可能在散块处和第一次为 0,这只有 \(O(n)\) 种可能,不为 0 时可以 \(O(1)\),所以复杂度 \(O(n\sqrt{n})\),然后散块暴力即可。https://loj.ac/s/2268788
9
决战。还是整块散块分开考虑。对于整块,考虑预处理所有一段整块的众数暴力算是 \(O(\dfrac n B \times \dfrac n B \times B) = O(\dfrac {n^2} B)\) 的,搞出来之后中间的整块 \(O(1)\) 做,然后和散块的数一起考虑。这样肯定不会漏,要考虑的数量是 \(O(\sqrt{n})\) 的,暴力做就行了。https://loj.ac/s/2270087
fun fact 1 : 所有代码都没有定义函数。
fun fact 2 : 第一次知道分块是前年 2 月,第一次尝试写这个专题是去年 2 月,完成这个专题是今年 2 月。

浙公网安备 33010602011771号