题目大意:
找出n个数,满足给出的m个区间内的数都不相同。问满足条件的字典序最小的序列是多少。
解题思路:
字典序最小,说明肯定要越小的越往前填,如果没有限制区间的话答案就是$n$个$1$啦,加上后最先出现的区间要最先考虑,即$l_1$ ~ $r_1$内的数为$1$ ~ $r_1 - l_1$,后面的根据出现的顺序(指填到x时最先覆盖x的区间)依次从小往大填就好了。
题目的难点就是填数时保证不重复。为了改变区间的顺序,肯定要先排序,排序是根据$l_i$为关键字。排序后模拟填数的过程:碰到区间就改变填的数的值,填数时要记录用过的数字,区间结束记得将区间覆盖不到的点再“收回”。而这个所需要的容器可以用优先队列或者set,想到合适的容器就简单多了。
Mycode:
1 |
|