『扫描线』Day5
推荐歌曲《我是逆蝶》。
A Divide Square
挖掘特殊点:有一个端点在边缘上。
如果我们扫 x 坐标,维护 lst 横 和交叉的 竖,非常不好维护,并且 TLE。
结论:一个交点会至少增加一个区域。证明显然。
当然还有一点 corner case。
B Cow Tennis Tournament
一开始想的是三元环会是怎的,推出的性质是错的,也不好做。(没注意到可以多次反转)
正难则反。对不合法的三元环计数。
发现性质非常好,只要有一个点出度是 2 就好了。
考虑枚举从一个点出发,答案就是
这个东西可以维护二维的邻接矩阵,每次求一行的全局和减去单点即可。
又是一个二维的问题了,容易想到扫描线,如何对操作进行差分。发现一次操作就是区间取反,可差分。
一次反转,我们找到对
C Treasure
自然的思路就是枚举起点和终点。
这个宝藏的限制钥匙,最终应该是从树上一段 dfn 区间开始,到另一段区间,代价是
考虑终点的这一维用扫描线处理。
经典问题之分类讨论:
-
满足祖先关系。找到
到 的第一个点 ,那么 子树外的所有点进入子树必然会经过 。 -
没有祖先关系。就是子树走到子树的关系。
-
。发现简单算很容易算重。
又是正难则反,直接用
不经过
子树外面很简单,子树内部要枚举儿子点计算。
如果每次操作都枚举可以被菊花卡爆,所以要打标记最后统一处理一个点。
D k-d-sequence
注意排序后。
那么就和区间内的数值域连续差不多了。转化如下:
区间内所有
这玩意可以用双指针和 cnt 数组求出。
需要
然后就是 pudding monsters,单调栈动态更新一下,维护最值即可。
注意有
E Colorful square
看到正方形那就可以二分答案了。不然你扫描线是不可能维护出这个长度的。
对于每个颜色,我们不能重复计算。所以需要维护每一个颜色的所有位置集合。要支持插入和删除。
每次加入一个位置,找到这个颜色中的位置集合的前驱后继,根据【不重复】的区间限制更新就可以了,实现采用 multiset。
F 内部白点
做过。
这东西就很扫描线,首先你对于一列你可以排序然后计算每次
这就是扫描线,记录每个 y 对应的
晚测
还是有点妙的。之前超的题解。
如果序列做主席树很难。
中位数还是经典地二分变成 1 和 -1。然后主席树就维护值域作为 Root 这一维,下标是 id。
因为你主席树对于
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!