星座 3 (Constellation 3)
G 星座 3 (Constellation 3)
总述:做法很多,一道练习各种套路的有价值的题。
对横坐标考虑一个区间
对建筑高度建出 笛卡尔树,于是每个节点对应一个区间以及区间高度最大值(即当前子树根节点对应的高度),这样我们只需考察
不妨统计最大能保留下来的星星价值,用总价值减去它得到答案。
Solution 1
线段树合并 / 启发式合并。
Solution 2
把笛卡尔树当成一棵普通的树形结构考虑,保留一个坐标为
这条链的两端点分别为
因此问题转化为:有若干祖孙链,选择一些使它们两两不交,求选择的链权值和最大值。
Solution 3
直接贪心考虑如何保留最大星星价值。
将星星按纵坐标从小到大排序。
若当前星星不会与已选星星发生冲突,直接选上。
否则考虑是放弃当前星星,还是选择当前星星而放弃与其有冲突的星星。
记与当前星星有冲突的星星的权值和为
否则,就暂时放弃之前的星星,之后做反悔贪心。
对有冲突的横坐标范围可以用两个并查集维护(一个向左一个向右),区间修改和查询有冲突的星星的权值可以用树状数组等进行维护。
本文作者:Schucking-Sattin
本文链接:https://www.cnblogs.com/Schucking-Sattin/p/17462590.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步