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),不会有“占用”的问题出现,因为这个可行区间是不断拓展的。

  • 相关阅读:
    linux权限补充:rwt rwT rws rwS 特殊权限
    关于Linux操作系统下文件特殊权限的解释
    Java学习笔记——Java程序运行超时后退出或进行其他操作的实现
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 复数四则运算
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13915602.html
Copyright © 2011-2022 走看看