分块
题目 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
通过情况 | O | O | O | O | O | O | O | O | O |
说明
本博文大部分内容参考「分块」数列分块入门1 – 9 by hzwer,主要是个人的巩固训练。
方法总结
分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。
○ 数列的简单分块一般要考虑三个问题:\
①不完整的块的 $O \left( \sqrt{n} \right)$ 个元素怎么处理\
②$O \left( \sqrt{n} \right)$ 个整块怎么处理\
③要预处理什么信息(复杂度一般不超过$O \left( n \sqrt{n} \right)$)
○ 分块的大小可以直接计算,也可以可以生成一些大数据,然后用两份分块大小不同的代码来对拍,还可以根据运行时间尝试调整分块大小,减小常数。
○ 在块内使用其他数据结构进行维护(入门2、3、6、9)
○ 块的重构/重新分块(入门6)
分块入门 1
题面
给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。
代码
1 | /* |
分块入门 2
题面
给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的元素个数。
代码
1 | /* |
分块入门 3
题面
给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的前驱(比其小的最大元素)。
代码
1 | /* |
分块入门 4
题面
给出一个长为n的数列,以及n个操作,操作涉及区间加法,区间求和。
代码
1 | /* |
分块入门 5
题面
给出一个长为n的数列,以及n个操作,操作涉及区间开方,区间求和。
代码
1 | /* |
分块入门 6
题面
给出一个长为n的数列,以及n个操作,操作涉及单点插入,单点询问。
代码
1 | /* |
分块入门 7
题面
给出一个长为n的数列,以及n个操作,操作涉及区间乘法,区间加法,单点询问。
代码
1 | /* |
分块入门 8
题面
给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c。
代码
1 | /* |
分块入门 9
题面
给出一个长为n的数列,以及n个操作,操作涉及询问区间的最小众数。
代码
1 | /* |