分块小结

打印 上一主题 下一主题

主题 868|帖子 868|积分 2606

分块概念

就是把一个长序列分成 \(\sqrt{n}\) 个区间,分别维护每个区间内的信息和,然后查询时可以优化时间复杂度。
还可以完成一些线段树完成不了的神秘操作,比如这道题
但是总体时间复杂度不如线段树,但它的扩展性比线段树还要强,因为分块中每个区间的信息和不必要具有传递性
怎么理解?
就比如说,必要对一个序列维护区间取模,我们可以开一个数组专门存储当前区间的所有数是否都小于要取模的数,以此实现修改的加速。
线段树的做法就会难想许多,不做赘述。
代码结构

预处理

预处理出每个区块的起始点和重点,以及每个数属于哪个区块。
必要时要处理处每个区块的长度(如要区间加)。
[code]int a[100011];int bel[100010];int st[5000],ed[5000],siz[5000],sum[5000];int cnt[5001],f[5001];void init(){        int sq=sqrt(n);        for(int i=1;i
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表