做题笔记(三)
经典问题:求解区间 个不交子段的和的最大值。
对于没有修改的版本,我们采用 P6821 [PA2012] Tanie linie 的做法,首先将原序列连续的正(负)数缩成一个数,然后用加入正数,不断减少连续段(加入负数和删除正数),用堆维护即可。
对于修改版本,我们用线段树维护区间最大子段和以及位置,每次取出最大的子段和,然后区间取反,也就是模拟费用流的思想。
经典问题:利用主席树优化二进制高精度加法和比较。
加法形如区间清空和单点赋值,可以线段树上二分解决,清空就是删除节点,比较可以记录每个点的哈希值,然后线段树上二分第一个不一样的位置即可。
首先利用线段树上二分求得和答案等价的一组偏序关系。
变成经典问题:, 中有 个小于号, 个小于等于号,求 的方案。
考虑把 变成 ,这样的话原序列的值域就变成了 ,最后的答案就是 。
bitset 优化字符串匹配的模板。
记录每种字符出现的位置,区间询问的话就差分答案即可。
经典问题:求给定序列有多少种排列使得相邻元素都不相同。
考虑容斥,求出钦定有 对相邻元素相同的方案 ,答案就是 。
考虑先计算无标号有颜色的小球计数,最后乘上 即可( 表示某种颜色小球的个数),发现不同的组合对象互不影响,那么先计算 表示对于第 种小球,划分出 对相邻元素的方案。
含义是在 个空隙种选出 个,然后把序列缩起来,有 个连通块,这些连通块之间的顺序是无所谓的,那么要除掉。
最后卷积起来就可以了,时间复杂度 或者 。
关键在于对于划分唯一的分配方式,对于一个点,钦定其贡献到最近的(有信息的)祖先,那么直接流就可以了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】