KTT学习笔记

1|0KTT 学习笔记

KTT 是由 EI 给出的解决区间加正数、区间最大子段和的数据结构。

大体的思路是在把普通最大子段和的信息看成和增量有关的一次函数,然后维护增量为多少时取到最大值的信息会改变,相当于是维护凸壳,但是只维护当前段和当前段的末尾位置,通过势能分析可以得到复杂度是 O((n+m)log3n),实际跑起来非常快,和 log2n 差不多。

1|1P5693 EI 的第六分块

题意:区间加正数,区间最大子段和。

思路:模版题,可以用来练手。

1|2P5073 [Ynoi2015] 世上最幸福的女孩

题意:全局加,区间最大子段和。

思路:离线下来,把每次询问时累计加了多少求出来,从小到大排序,这样就转成了全局加正数,区间最大子段和。

1|3P6792 [SNOI2020] 区间和

题意:区间对一个数取 max,区间最大子段和。

思路:吉司机线段树+KTT。

因为有区间取 max 操作,只有吉司机线段树可以维护,而我们每次会影响最大子段和的情况就是对最小值进行区间修改,发现这刚好是 KTT 可以维护的东西,其余的情况都不会影响最大子段和。

复杂度应该是和 KTT 一致,就是说两种势能可以分开考虑。

1|4The Awesomest Vertex

题意:给定一棵根为 1 的有根树,每个节点有两个权值 a[i]b[i] 。定义 R(v)v 祖先的集合(包括自己),则一个节点 v 有多棒取决于其真棒程度,真棒程度是这样定义的:

|wR(v)aw||wR(v)bw|

|x| 表示 x 的绝对值。

现在请你支持两种操作:

  • 1  v  x — 将 av 加上 x
  • 2  v — 输出以 v 为根的子树中最大的真棒程度

思路:发现很像区间加区间最大子段和,但是不会处理绝对值。

其实处理绝对值只需把 b 取反再做一遍即可。

而且这道题求的是单点值,不用维护除了 sum 之外的信息。

1|5CF1830F The Third Grace

题意:给定一个数轴上的 n 个区间和 m 个点。第 i 个区间覆盖坐标 [li,ri],第 i 个点在坐标 i 处,并且具有系数 pi

最初,所有点都未激活。你需要选择一些点来激活。对于每个区间 i,我们定义它的代价为:

  • 若区间内没有被激活的点,则代价为 0
  • 否则,代价为在区间内坐标最大的被激活点的系数。

你的任务是通过选择哪些点激活,使得所有区间的代价之和最大。

思路:很厉害的题目。

f[i] 表示以 i 为最后一个被选中的位置的方案的最大值,其中不包含 i 的贡献。

考虑怎么转移。枚举下一个位置 j,有 f[i]+cnt[i][j]pif[j],其中 cnt[i][j] 表示 lij<r 的区间数量。

考虑扫描线来维护所有 f[i]+cnt[i][j]pi,记为 gi,那么每次当 jj+1 时,会对所有 r=j 的区间 [l,r],令 gigi+pi

这就是 KTT 可解决的问题了。


__EOF__

本文作者Xttttr
本文链接https://www.cnblogs.com/Xttttr/p/18015339.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xttttr  阅读(569)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示