分块算法

感觉分块是一种很蛋疼的算法,但据说有的时候很好用 ( 分块算法可以维护一些线段树维护不了的东西,例如单调队列等,线段树能维护的东西必须能够进行信息合并,而分块则不需要 )。

分块算法很多时候会把复杂度优化一个O( )。

优化方式如下
一个规模为n 的问题,
我们将其变得有序,
令 x=
那么 我们可以将其划分为 块区域,分别为 [1 x] [x+1 2x] [2x+1 3x] ……[kx n]。
对于每一块 我们会对其添加某些标记

有两种修改方式或查询方式
单点查询或修改
修改为例
我们找到要修改的点,修改它,往往会影响到这个块之后的元素,不要犹豫暴力全修改。然后还会影响之后的块,不要犹豫,暴力修改,但是不是修改所有的点,而是修改之后所有块的标记值。

咱们算一下复杂度,修改块内O( ) 修改其他块O() 所以一次修改的期望O()。全暴力的话O(n)

区间修改查询

还是以修改为例
假设修改的区间为[l r], 找到l点,找到r点,从l往右修改,直到本块的最后一个元素,或者碰到r,结束第一轮的修改;向右整块修改(修改标记),直到遇到r所在块,结束第二轮的修改;继续向右直到r,结束第三轮的修改

精炼点说:如果是区间[L,R]修改的话,对于被[L,R]整块跨过的块直接打标记,两端剩余的部分暴力重构块的状态即可

复杂度还是O();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值