##分块##
分块可以用来处理一些区间询问问题 其实更像是优化暴力。。
将序列分为√n个块 预处理出每个块的信息
当询问一段区间的信息时 完全包含块的部分利用已经得到的信息快速查询
而不在块内的点暴力查询
由于块外的元素小于2√n个 块最多不超过√n个 因此查询的复杂度为O(√n)
数列简单分块问题实际上有三项东西要我们思考:
对于每次区间操作:
1.不完整的块 的O(√n)个元素怎么处理?
2.O(√n)个 整块 怎么处理?
3.要预处理什么信息(复杂度不能超过后面的操作)?
分块 by hzwer
##莫队算法##
莫队算法是用来处理一类无修改的离线区间询问问题
这一类问题大多都是在知道[L , R]的答案时可以O(1)的算出[L+1 , R],[L , R+1], [L-1 , R] ,[L , R-1]的答案
因此我们考虑以怎样的一个顺序计算所有询问可以得到一个最优的复杂度
若将每一个询问[L,R]都看作是二维平面上的一个点 从询问[L,R]到询问[L’,R’的代价就是|L-L’|+|R-R’| 即两个点的曼哈顿距离 那么这个问题就转化成了求二维平面上的最小曼哈顿距离生成树
这个东西不是很好打。。 所以我们有一个好写的替代品 分块
以询问按照左端点所在的块为第一关键字 右端点为第二关键字排序
按顺序做下去即可。。 复杂度为O(n√n)