题意
给出n条线段,求要使没有点被k条及以上条线段覆盖的最小删除数目,并给出方案。
分析
先按左端点排序,依次遍历,此时当前的线段之前的所有线段的左端点都小于等于当前线段,只要他们的右端点也大于等于当前线段的左端点即可。用优先队列维护这些线段的右端点的值和下标,那么队列的大小即为当前点上覆盖的线段的数目。考虑删除右端点最大的线段,这样对后续的影响最优。
但是,使用一个优先队列时只能维护最大或最小,无法满足条件。考虑使用另一个记录最大以及一个数组标记是否被删。那么,我们虽然在原本的优先队列里没删,但是我们知道该下标对应的值已经不存在了。简单维护一个差值就能知道当前优先队列的真实值的数目。
#include
#include
#include
#include
#include
#include
#include