闲扯
这次出去培训,我去的 $A$ 班,感觉没讲什么东西,但是 $B$ 班的已经把线段树优化连边这种东西讲了???
题面
Solution
我们考虑给出的限制条件有什么用。
显然,如果是 $-1$ ,那么我们可以直接忽略掉。
如果 $nxt_i\not=-1$ ,那么,我们可以得到如下两个条件:
- $val_i<val_{nxt_i}$ 。
- $val_i>val_j,j\in[i+1,nxt_i-1]$ 。
我们要求的就是这样一个满足条件的序列。
我们可以将限制条件看作是边,那么我们将大的连向小的,
那么我们相当于是求图中的一个拓扑序,其中拓扑序越小的,对应的值就越大。
但是直接连边复杂度是 $O(n^2)$ 的,无法接受。
可以发现每个点都是连向一个区间,所以我们可以使用一个黑科技:线段树优化连边。
我们将要连向的区间在线段树上划分成一个个小区间,由线段树可知,这样的区间最多 $\log$ 个,所以时间复杂度和空间复杂度都变成了 $O(n\log n)$ ,就可以愉快的做这道题了。
Code
1 |
|
总结
一道比较套路的题,感觉难度其实没有这么大。