zoukankan      html  css  js  c++  java
  • 洛谷 P6852 Mex

    洛谷 P6852 Mex

    洛谷传送门

    题目描述

    小 G 曾经有一个 00 到 nn 的排列(下标从 00 开始),但他忘记了这个排列。

    现在他想把这个排列找回来,他努力地回想,只能回想起关于这个排列的 mm 条信息,每条信息形如 (l,r,val)(l,r,val),表示区间 [l,r][l,r] 的 { m mex}mex 值为 valval。一个区间的 { m mex}mex 值是最小的没有在这个区间中出现的自然数。

    小 G 把 nn 和这 mm 条信息告诉了你,希望你能帮他还原出一个排列,或者告诉他他的回忆出现了问题。

    输入格式

    第一行两个整数 nn 和 mm,含义见上。

    随后 mm 行每行三个整数 l,r,vall,r,val 描述一条信息,表示区间 [l,r][l,r] 的 { m mex}mex 值为 valval

    输出格式

    如果不存在满足所有条件的排列,输出 -1−1。

    否则输出一行 n+1n+1 个正整数,表示一个 00 到 nn 的排列。

    本题采用 Special Judge。如果满足条件的排列有多个,你可以输出任意一个。


    题解:

    总觉得这道题评绿多少有些难...

    蓝?

    果然蒟蒻还是太菜了。

    采用区间合并的思路来解决这个问题。

    由于我们是构造排列,所以显然只要解决“某个值可能出现的区间”和“值与值放置位置是否会产生冲突”这两个问题。

    由于Mex值的定义,对于一个区间([l,r])的Mex值(v),这个区间一定会出现(0-(v-1))这所有的数,一定不会出现v,大于v的不能确定。

    那么,对于每个值来讲,分是否是0讨论:

    不是0:那么([0,v-1])一定出现的区间,同时也是(v)一定不能出现的区间就是这些区间的并。

    是0:那么0一定不能出现的区间就是这些区间的并。

    由上面的定义,发现随着(v)增大,其可行区间也是一定变大或不变的。这为我们解决第二个问题提供了思路。也就是,我们在某一个值(v)的可行区间随意挑一个值放进去,对于下一个值(v+1),不会有“占用”的问题出现,因为这个可行区间是不断拓展的。

  • 相关阅读:
    RHEL6 建立DVD repo
    stl之std::remove_copy
    分鱼问题
    Nutch的日志系统
    log4j配置文件及nutch中的日志配置
    slf4j教程
    Java中的日期操作
    Avro基础
    【JAVA编码专题】总结
    【JAVA编码专题】深入分析 Java 中的中文编码问题
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13915602.html
Copyright © 2011-2022 走看看