2024-2025 集训队互测 Round 13 - 线段树与区间加
前言:张定江的题,但是在讲课里面拉的,放在一堆答辩里面。这个题虽然是答辩,但是是有价值的。
题面有一百个锅。不过不影响做题就是了。
我们可以发现 ,故我们可以直接把 以特定方法加到 上,然后问题变成求 ,其中 是新算出来的点权。
考虑一个事情,令 ,,那么实际上要算的是 的值。这个东西有比较好的意义。我们找到一次修改操作遍历到并且不直接退出,要下传标记的节点,它们显然是两条相交链状的。把它们的 都清空。然后是所有完全包含于修改区间的节点,将它们的 都增加 。现在唯一的问题就是如何找到完全包含于修改区间的节点。
我们考虑以如下方式对树上节点标号:
对于一条重链,我们先将链上的点依次标号,再递归对链上所有重儿子为右子树的点的左子树进行标号,也即是对以其为链头的重链进行标号。再对另一侧做同样的事情。
这样标号出来,我们发现,一个子树可以用 个区间表示,并且我们要得到的实际那些点上是对于某条链,链上每个点的不在链上的左/右子树的节点,这个在树剖时直接调用 个标号区间就可以了,因为其在上述标号规则下必定是连续的。修改的时候对两条链进行相应的寻找就可以了。
时间复杂度 ,细节有点多。
本文作者:TulipeNoire
本文链接:https://www.cnblogs.com/TulipeNoire/p/18640746/2024_2025_Homework_R13T1
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步