zoukankan      html  css  js  c++  java
  • Gym

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

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

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

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

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

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

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

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

  • 相关阅读:
    [HNOI2012]永无乡
    [HNOI2011]括号修复 / [JSOI2011]括号序列
    [NOI2005]维护数列
    文艺平衡树(Splay)
    SP2713 GSS4
    SP1716 GSS3
    Cookie和Session
    Session和Cookie的区别与联系
    Django ORM 多对多操作 使用聚合函数和分组 F查询与Q查询
    csrf攻击
  • 原文地址:https://www.cnblogs.com/Aragaki/p/11768243.html
Copyright © 2011-2022 走看看