大纲
1.分块思想
2.分块实现操作
1.分块思想
分块的思想是将整个区间划分成一些区间,预处理每一个块,这个过程就是分块的过程。
分块的时间复杂度在于块的大小,块的大小关乎最终的复杂度。
在数学中可以推导出来,当块的大小m=sqrt(n)的时候,时间复杂度是最小的。
2.分块实现操作
2.1.预处理块
首先要预处理[1, n]中每一个位置属于的块编号,belong[i]表示位置i所划分的块编号。
接下来根据题目的主要逻辑,将每一个块预处理答案。
就比如求和,每一个块都预处理一下它的和,时间复杂度O(n)就是O(sqrt(n)*sqrt(n)),共sqrt(n)的块,每个块长度为sqrt(n),计算和就是sqrt(n)*sqrt(n)。
2.2.分块查询
假设现在查询[l, r]的和,运用预处理的块。
就比如这个查询: