定长分块

[复制链接]
发表于 2026-1-8 14:09:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
被 NOIP2025 T4 创飞后告急学习这个 trick。
简介

处理惩罚限定区间长度在某个范围的区间题目时,可以思量定长分块这个 trick。
I.[EC Final 2021] Vacation

题意:给定常数 \(c\) 和序列 \(a\),单点修改,区间查询 \([L,R]\) 内长度不凌驾 \(c\) 的最大子段和,答案和 \(0\) 取 \(\max\)。
把原序列以 \(c\) 为块长分块,那显然合法子段不大概跨过整块,对于区间扣问,可以把答案拆成四部分:整块内,散块内,两个整块之间,散块和他旁边的块之间。
<ul>整块内和散块内:块内的区间肯定合法,对每个块开一棵线段树 T1 维护块内最大子段和,扣问的时间必要查询连续的多少整块的块内最大子段和,再开一棵叶子节点体现一个整块的线段树 T2 维护区间最大值即可。修改的时间先在 T1 上修改它地点块的线段树,再在 T2 上修改它地点块的值即可,全都是单点修,区间查。
整块和整块之间:记 \(pre_i/suf_i\) 体现 \(i\) 到它地点块的左端点/右端点的区间和(大概说块内前缀和/后缀和)。一组跨块的 \(l,r\) 必要满足 \(r-l+1\le c\),贡献为 \(suf_l+pre_r\)。改写一下限定变成 \(r-c>1;                if(x
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表