做题笔记(三)

经典问题:求解区间 k 个不交子段的和的最大值。

对于没有修改的版本,我们采用 P6821 [PA2012] Tanie linie 的做法,首先将原序列连续的正(负)数缩成一个数,然后用加入正数,不断减少连续段(加入负数和删除正数),用堆维护即可。

对于修改版本,我们用线段树维护区间最大子段和以及位置,每次取出最大的子段和,然后区间取反,也就是模拟费用流的思想。

经典问题:利用主席树优化二进制高精度加法和比较。

加法形如区间清空和单点赋值,可以线段树上二分解决,清空就是删除节点,比较可以记录每个点的哈希值,然后线段树上二分第一个不一样的位置即可。

首先利用线段树上二分求得和答案等价的一组偏序关系。

变成经典问题:a1a2an 中有 c 个小于号,n1c 个小于等于号,求 ai[1,n]N 的方案。

考虑把 aiai+1 变成 ai<ai+1+1,这样的话原序列的值域就变成了 n+n1c=2nc1,最后的答案就是 (2nc1n)

bitset 优化字符串匹配的模板。

记录每种字符出现的位置,区间询问的话就差分答案即可。

经典问题:求给定序列有多少种排列使得相邻元素都不相同。

考虑容斥,求出钦定有 i 对相邻元素相同的方案 fi,答案就是 i=0n1(1)ifi

考虑先计算无标号有颜色的小球计数,最后乘上 si! 即可(si 表示某种颜色小球的个数),发现不同的组合对象互不影响,那么先计算 gi,j 表示对于第 i 种小球,划分出 j 对相邻元素的方案。

gi,j=(si1j)(sij)!

含义是在 si1 个空隙种选出 j 个,然后把序列缩起来,有 sij 个连通块,这些连通块之间的顺序是无所谓的,那么要除掉。

最后卷积起来就可以了,时间复杂度 O(n2) 或者 O(nlog2n)

关键在于对于划分唯一的分配方式,对于一个点,钦定其贡献到最近的(有信息的)祖先,那么直接流就可以了。

作者:紊莫

出处:https://www.cnblogs.com/wenmoor/p/18541514

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   紊莫  阅读(14)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题