[旧文章补档]分块 & 莫队算法

##分块##

分块可以用来处理一些区间询问问题 其实更像是优化暴力。。
将序列分为√n个块 预处理出每个块的信息
当询问一段区间的信息时 完全包含块的部分利用已经得到的信息快速查询
而不在块内的点暴力查询
由于块外的元素小于2√n个 块最多不超过√n个 因此查询的复杂度为O(√n)

数列简单分块问题实际上有三项东西要我们思考:
对于每次区间操作:
1.不完整的块 的O(√n)个元素怎么处理?
2.O(√n)个 整块 怎么处理?
3.要预处理什么信息(复杂度不能超过后面的操作)?
分块 by hzwer
##莫队算法##
orz

莫队算法是用来处理一类无修改的离线区间询问问题
这一类问题大多都是在知道[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)

复杂度证明戳我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值