APIO2012 简要题解

本文介绍了两种算法竞赛中的问题解决思路,一种是通过大根堆和左偏树实现的调度问题,另一种是通过区间覆盖和贪心算法解决的忍者放置问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dispatching:

  我们可以使用一个大根堆保存一个子树中的所有点,同时维护节点个数和点权和。不断删除最大值使和小于m,这样就是一个方案。再把子树合并到父节点的堆中,用左偏树可以做到O(log n)。

 

guard:

  我们把报告无人的区间都删去,再把完全包含其他子区间的区间也可删去(因为它们一定可以满足)。之后再离散化、排序。记F(i)为满足1-i号区间(排序后的)限制的最少的忍者数,G(i)为满足i-n的忍者数,这可以用贪心求出(每次选未被满足的第一个区间的最右端)。这里我们也可以发现,只有一个区间的右端点才一定有人。这样我们枚举每个区间,若长度为一则一定要取;若长度不为一,则尝试右端点左边一个可否放人,设此处与i-j号区间相交,若F(i-1)+G(j+1)+1=ANS就可以放。最后还有若可能的位置与忍者数相等,就应全部都放。

 

kunai:

  太神了!

转载于:https://www.cnblogs.com/taorunz/archive/2013/05/10/3072048.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值