题意
平面直角坐标系上给定 个矩形,第 个矩形颜色为 ,颜色大的矩形将覆盖颜色小的矩形,问最后能看到几种颜色。
题解
首先离散化,考虑扫描线如何维护序列上的颜色。
一个区间 投射到线段树上 个不交区间,总共 个。对于每个区间,直接把每种颜色塞到一个 set 里,当前区间可能被看到的颜色只会是 set 最大值,记为 。
考虑只插入怎么做,发现 处的颜色即线段树上根节点到 路径上每个 取 ,那我在一个被颜色 完全覆盖的区间 上,若根到 路径上的 小于 ,且存在该节点到某一叶节点的路径 也小于 ,说明 可被看到,于是在线段树上维护 表示所有 到叶节点的路径 的最小值,即可 判断,每次最多增加 个新颜色。
现在加入删除操作,一个区间的删除可能会增加更多可被看到的颜色,但答案最多 个,那我设法只考虑没被看过的颜色,用 表示以 为根的子树,没被统计过且可能会被看见的最大颜色,从 中删掉颜色 ,重新计算 。pushup 时先继承左右儿子,考虑 对 和 的贡献,分两种情况:
若 ,即当前区间可能会被看见的最大颜色比 中已被看见的最小颜色还小,越往上走 只增不减,自然看不见 了,令 。
若 ,说明出现了一种从未被看见的颜色被看到了,标记为已看见,并把 对应的 个区间拉出来修改信息。若修改后 仍不为 ,就继续修改,直到 。因为最多只有 个颜色,所以总修改次数最多 次。
线段树一个 ,set 一个 ,时间复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话