洛谷 P6852 Mex

洛谷 P6852 Mex

洛谷传送门

题目描述

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

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

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

输入格式

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

随后 mm 行每行三个整数 l,r,vall,r,val 描述一条信息,表示区间 [l,r][l,r] 的 {\rm 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\),不会有“占用”的问题出现,因为这个可行区间是不断拓展的。

posted @ 2020-11-02 17:50  Seaway-Fu  阅读(135)  评论(0编辑  收藏  举报