Pro Tanto Quid Retribuam|

Schucking_Sattin

园龄:2年11个月粉丝:13关注:28

2023-06-07 10:11阅读: 21评论: 1推荐: 1

星座 3 (Constellation 3)

G 星座 3 (Constellation 3)

总述:做法很多,一道练习各种套路的有价值的题。

对横坐标考虑一个区间 [l,r],若该区间上建筑高度的最大值为 x,则该区间内 >x 的星星数量不能超过 1 个。

对建筑高度建出 笛卡尔树,于是每个节点对应一个区间以及区间高度最大值(即当前子树根节点对应的高度),这样我们只需考察 O(n) 个区间。

不妨统计最大能保留下来的星星价值,用总价值减去它得到答案。

Solution 1

线段树合并 / 启发式合并。

Solution 2

把笛卡尔树当成一棵普通的树形结构考虑,保留一个坐标为 (x,y) 的星星相当于在树上覆盖一条对应权值的祖孙链。

这条链的两端点分别为 x 位置对应的节点 v 和一个祖先节点 u,满足 hu<yhfauyu 可以倍增求解。

因此问题转化为:有若干祖孙链,选择一些使它们两两不交,求选择的链权值和最大值。

Solution 3

直接贪心考虑如何保留最大星星价值。

将星星按纵坐标从小到大排序。

若当前星星不会与已选星星发生冲突,直接选上。

否则考虑是放弃当前星星,还是选择当前星星而放弃与其有冲突的星星。

记与当前星星有冲突的星星的权值和为 w,当前星星权值为 c,若 wc,则一定放弃当前星星更优。

否则,就暂时放弃之前的星星,之后做反悔贪心。

对有冲突的横坐标范围可以用两个并查集维护(一个向左一个向右),区间修改和查询有冲突的星星的权值可以用树状数组等进行维护。

本文作者:Schucking-Sattin

本文链接:https://www.cnblogs.com/Schucking-Sattin/p/17462590.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Schucking_Sattin  阅读(21)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起