Gym - 102012H Rikka with A Long Colour Palette N线段K色贪心染色

给你数轴上的N条线段和K种颜色 K和N1e5 要你把这N条线段染色 使得有K种不同颜色的线段长度最长

首先很容易想到被至少K段线段覆盖的区间是一定有贡献的 接下来就是怎么染色的问题

我们把这N个区间的端点排序一下 把K个颜色放入一个队列

碰到端点是左端点 先检查颜色队列是否为空 为空的话 把这个左端点放入一个待染队列

为什么还需要一个待染队列? 因为如果当前区间已经被K条线段覆盖再来一条的话 我们不能随意染色 随意染色是会影响后面的答案的

颜色队列不为空的话 我们就可以直接贪心地给这个线段染色

碰到端点是右端点 看这个线段是否被染色 如果已经被染了 则直接回收这个颜色 push进队列里 如果没被染过的话 说明这个线段是在待染队列里且没有被染过的(即当前区间已经被K覆盖)我们随意染色即可

算最终答案的话 每碰到一个端点检查颜色队列是否为空 为空则答案加上当前端点和前一个端点之间的距离

posted @ 2019-10-30 21:53  Aragaki  阅读(363)  评论(0编辑  收藏  举报