题解 | #保卫家园#

保卫家园

https://ac.nowcoder.com/acm/problem/205068

参考文章:https://blog.csdn.net/qq_41286356/article/details/106892022

问题等价:从集合中选取若干个区间集合,每个区间中相互覆盖重叠的区间个数不超过k个,问最多能选取多少个区间;

贪心思路:

1、枚举区间的起点,每次维护一个大小为k的集合,集合内只存放区间【l,r】范围内的r;

(枚举起点的必要性:如果不枚举起点,eg:n = 4,k = 2;【1,2】,【1,3】,【2,7】,【2,9】, 当前三个加入set后,set运行到第四个时set中内容为2,3,7;此时set中最后一个元素为7,但是我们实际要删除的是【1,3】,因为这个在前面, 所以一定要枚举起点,每次将set中元素小于当前起点的值删除)

2、如果集合大小小于k,直接将元素放入集合;

3、如果集合大于k,将集合中r最大的那个弹出集合,表示这个人没有入伍(即覆盖不了)ans++;

4、ans就是最终答案,由于会有重复,所以用multiset维护这个集合;

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 12:05
俺不中了,BOSS遇到了一个hr,我觉得我咨询的问题都很正常吧,然后直接就被拒绝了???
恶龙战士:你问的太多了,要不就整理成一段话直接问他,一个一个问不太好
点赞 评论 收藏
分享
合不合适,我自己说了才算
码农索隆:hr:“真执着啊,来我公司当法人吧”
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务