分块小总结

分块这个东西吧,其实它就是个暴力。。。想一些序列、树上问题,想来想去没什么想法了可以分块(树上分块我好像还不会QAQ)

分块能处理一些数据结构很难处理或者不能处理的东西(如有间隔的询问、修改),分块也有标记而且也需要支持标记合并

分块有很多分块的方法,可以对处理的序列分块,对操作分块,对询问分块等

分块很多时候都是对于被完整覆盖的块通过标记或预处理 O(1) 修改或查询,没有完整覆盖的暴力重构或查询

如果题目只有询问没有修改,通常要分块预处理一些东西。

对于题目中的某两个约束,他们是相互制约的且这种制约是乘积关系——步长和项数,总有一个不能太大,则可以针对两种情况分别设计算法,然后组合起来,例如:
无修改询问a[x]+a[x+y]+a[x+2y]+a[x+ky],(x+(k+1)y>n)
从第一个数开始每个Di个数加X,询问连续区间
询问L~R出现恰好Ki次的数的数目
这些都可以将询问分开处理,如例1, y>n 时暴力查询就行了,对于 y<n 时,将下标 x mod y 分块,弄个前缀和什么的
参考文献:集训队13、14年论文

块的大小是不确定的,要视具体情况而定,比如有时卡空间,块要大一些,时间上带了log什么的,需要块少一些这时块也要大一点

你可能感兴趣的:(分块大法好)