CTS2022
D1T1 普罗霍洛夫卡
考虑扫描线,那么问题就变成了区间
我们先单独考虑一个数的情况,如果在
而由于初始
我们考虑
相当于要找到某个
由于每一个数最多进行
感觉没有办法使用
对于
对于
对于散块的暴力重构,上面
由于
考虑优化。
发现
这样时间复杂度就优化到了
D1T2 独立集问题
很神秘的 DP 题,感觉不是很会讲,所以没有写怎么做。
D1T3 回
发现回字形的加法是不好处理的,但是发现它是若干个矩形相加,所以考虑二维差分。发现在二维差分的数组上,操作形如让
而对于询问,我们也可以差分成对于
主对角线
我们先考虑主对角线如何求:
发现我们可以再对修改加进行一次差分:对于
修改统一为:对于
现在我们讨论一个修改
首先要有
发现有两个
将式子拆开,得到:
将
发现和修改有关的只有形如
考虑若干个修改对一次询问,就是对于所有
副对角线
发现副对角线是类似的,但是要麻烦一些。
也考虑差分:对于
修改变成:对于
发现操作和修改有三种关系:
我们考虑红色的贡献:
首先有
同样将
但是直接处理
然后就是橙色的情况,有
记
最终时间复杂度为
D2T1 燃烧的呐球
考虑使用 Boruvka 算法。
相当于要对于每一个点统计距离他最近的异色点,在接下来维护的所有信息,默认是维护颜色不同的最小的两个值。
发现描述的贡献就是树上子树的对称差,而这个对称差只会有三种形态:
而对于没有祖先后代关系的统计,不需要钦定没有祖先后代关系,因为这样松限制是劣的,必然不会是最优解。
接下来对于所有的情况进行讨论:
若
- 若
和 没有祖先后代关系,可以对于每一个节点维护子树内最小的 ,每一个节点将这个信息向父亲合并即可。 - 若
是 的祖先,考虑使用线段树合并维护,查询 对应子树区间内最小的 。 - 若
是 的后代,考虑使用线段树合并维护,让 对其对应的子树区间都贡献 。
上面两棵线段树分别要支持:单点修改,区间查询,线段树合并;区间修改,单点查询,线段树合并。
若
- 若
和 没有祖先后代关系,对于每一个节点维护祖先内最小的 ,每一个点的权值从父亲处继承。 - 若
是 的祖先,查询 对应子树区间内最小的 ,但是在 dfs 的回溯中需要支持可撤销。 - 若
是 的后代,让 对其对应的子树区间都贡献 ,但是在 dfs 的回溯中需要支持可撤销。
上面两棵线段树分别要支持:单点修改,区间查询,可撤销;区间修改,单点查询,可撤销。
若
- 若
和 没有祖先后代关系,甚至不需要上树,直接统计不同颜色的最小的 。 - 若
是 的祖先,和第一种情况的第一类一致。 - 若
是 的后代,和第二种情况的第一类一致。
将上面九种情况分别处理出来即可。
时间复杂度
D2T2 袜子
半平面小Z的袜子。
将所有的点按照颜色从小到大排序,然后每
那么我们只需要对于每一个块考虑了。
对于块内作旋转扫描线,在整个过程中,点交换相对顺序的次数只有
而旋转扫描线的过程中,对于每一个询问的每一个查询都是查询的前缀的点或者后缀的点,所以可以在每一次交换的之后对
时间复杂度为
D2T3 WBTT
不会。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)