给一个长度为 $n$ 的序列,有 $q$ 次操作,第 $i$ 次操作将区间$[l_i , r_i]$的值赋值为 $i$,后赋值可以覆盖前面的并且保证每个位置都至少会被选一次,现给出最终的序列但某些位置可能被变成了0,问你是否存在满足题意的序列,有的话输出任意一个,没有$NO$ $(1\le n,q \le 2·10^5)$
题解
- 分析可知三个必须满足的条件:
- 两个相同的数中间不可能夹着比其小的数
- $q$必须出现在最后序列中
- 所以解法也就很显然了
- 首先随便找个$0$的位置,修改为$q$
- 记录每个数出现左右端点,从大到小枚举$q$值,线段树查询这个区间的最小值,若最小值为 $0$,把区间$0$都改为这个数,修改后查询最小值是否满足,最后还有$0$的位置,都修改为$1$即可。
代码
1 |
|