题意简述
构造一个 $n$ 的排列 $p$,要求 $p_i\in[l_i, r_i]$ 且满足 $m$ 个限制 $(u, v)$,表示 $p_{u} < p_{v}$。
$n\le 3\times 10^5, m\le 10^6$,需判断无解。
主要思路
首先如果没有 $(u, v)$ 的限制,直接从左到右贪心选择右端点最小的即可。
假设有限制 $(u, v)$,可以令 $l_v\gets max\{l_v, l_u + 1\}, r_u\gets \{r_u, r_v - 1\}$。容易发现在这样操作后,$u$ 必定在 $v$ 之前被选择。如果有多个限制,按拓扑序处理即可。
时间复杂度 $O(n\log n + m)$。
参考代码
1 |
|