lxl学长讲课笔记
lxl 学长讲课笔记
常数种可能性的状态
通过预先处理多种状态的信息,从而快速的转换状态。
经典操作:flip
。
分析信息的思路
- 利用线段树
利用线段树的时候,如何合并两个分支区间的信息,我们需要有如下注意:
-
答案 - 依赖的信息,继续的依赖,这样就能找到需要维护的东西。这终会产生闭包。
-
合并时,我们只需要考虑跨过分治区间对于答案的贡献,对于不同的情况进行讨论即可。
只是在这里,两个分治区间的信息可以快速地合并罢了。
- 对于不独立信息的处理
独立的信息指区间 区间和问题。
不独立的如配对相关问题,经典的有前驱后继,或者 的问题。
一种做法是离线进行扫描线,但是不能带修,一种是强行进行高位扫描线,也就是莫队,可以带修,但是复杂度可能无法接受。
然而更好的做法我们需要尝试将不独立的信息变的独立:
-
配对问题中合理的利用
pre
会有奇效! -
配对问题可能出现 影响
pre
的情况,我们需要合理利用支配
的性质来减少不必要的影响。
例如 P6617 查找 Search 中有很好的体现。
- 在什么地方使用数据结构?
一般来说,我们有两种方案:
- 对于信息建立数据结构,在询问时对其进行查询。
- 对于询问建立数据结构,利用信息更新最终答案。
在 CF702F T-Shirts 中有很好的体现,这两种思路都可以。
小技巧
颜色段均摊
对于 ODT
来说,其区间推平的复杂度是 的,十分的优秀,但是对于查询来说,我们需要通过分块或者线段进行辅助,从而达到正确的复杂度。
判断是否可以均摊,我们可以看是否能够构造出一个操作序列使得序列复原,如果可以复原,那么基本是不可以均摊的。
或者我们看是否能找到一个量,不增,或者不减,或者有一个神秘的上界。
更详细的文章:# 算法学习笔记(42): 颜色段均摊
容均摊
对于 的操作,可能可以通过 的势能来搞定。
如果发现极差会变化:,那么便可以暴力递归下去修改,否则可以整体打一个 的标记。对于区间加减,在线段树上至多影响 个节点的势能,所以复杂度并不会有问题。
类似的操作有 ,这可以将除法操作变为对于区间的加减操作。
事实上吉司机线段树对于区间取 的操作也是利用了容均摊,将对于最值的操作分成两套标记:最值与非最值,从而达到合理的复杂度。
自由度与扫描线
自由度指的是询问中变量的数量,例如一位区间的自由度为 。
如果将动态问题转化为静态问题,自由度 ,也就是增加了 时间
这一维度,这也常常是扫描线的做法。
很多时候,我们可以将询问与信息的影响放在一个二维平面上进行理解,从而得到扫描线的做法。
更详细的文章:
换维扫描线
其处理的修改与询问大概类如:
通过换维扫描线使得:
- 区间加 单点加
- 单点查 区间查
通俗一点来说,就是对于修改建立数据结构!
区间子区间问题
形式就是多次询问给定区间 ,求形如 的式子。
一般来说,我们可以从如下几个步骤入手:
- 考虑只是一个区间怎么做,是否有很好的性质或者充要条件?
- 考虑只有一次询问怎么做,是否可以进行扫描线,或者进行分治?
- 如果可以扫描线,那么这个问题是否可以通过历史版本和搞定?
- 如果可以分治,是否可以利用询问挂在区间上搞定?
- 考虑每个点对于那些区间有贡献,放在二维平面上理解,利用甚至 的树套树?
- 考虑 计算的经典优化方法?
- 考虑这是不是一个 的式子,可以利用类似 的东西碾过去?
- 下一道题?(雾
基于区间逆序对的思考
区间相关的信息,维度与自由度,莫队
双前缀莫队:。将 自由度转化为 自由度的问题,利用莫队。
莫队和可撤销莫队至多差一个 的复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?