CF2162F Beautiful Intervals

题目描述

给定一个整数 $n$ 和 $m$ 个区间。每个区间的形式为 $[l_i, r_i]$,满足 $1 \le l_i \le r_i \le n$。注意,区间可以重复。 定义 $p$ 为长度为 $n$ 的一个排列,包含所有整数 $0,1,2,\dots,n-1$,且每个只出现一次。 有一个多重集合 $M$,最初为空。 对于每个区间 $[l_i, r_i]$: - 考虑子数组 $p[l_i \dots r_i]$, - 计算 $v_i = \operatorname{mex}(p[l_i \dots r_i])$, - 将 $v_i$ 插入到 $M$ 中。 处理完所有区间后,$M = \{v_1, v_2, \dots, v_m\}$。 你的任务是构造一个长度为 $n$ 的排列 $p$,包含所有 $0,1,2,\dots,n-1$,使得 $\operatorname{mex}(M)$ 最小。 $\operatorname{mex}(a)$ 表示数组 $a$ 的最小未出现的非负整数。例如,$\operatorname{mex}([2,2,1])=0$,因为 $0$ 没有出现在数组中;而 $\operatorname{mex}([0,3,1,2])=4$,因为 $0$、$1$、$2$、$3$ 都出现了,但 $4$ 没有出现。

输入格式

第一行包含一个整数 $t$($1 \le t \le 1000$)——表示测试用例的组数。每组测试用例的描述如下。 每组测试用例的第一行包含两个整数 $n$ 和 $m$($3 \le n \le 3000$,$1 \le m \le 3000$)。 接下来的 $m$ 行,每行包含两个用空格分隔的整数 $l_i, r_i$($1 \le l_i \le r_i \le n$),表示一个区间。 保证所有测试用例中 $n$ 的总和不超过 $3000$,$m$ 的总和也不超过 $3000$。

输出格式

对于每个测试用例,输出一行,包含 $n$ 个两两不同的整数 $p_1,p_2,\ldots,p_n$,即排列 $p$,需满足 $0\le p_i < n$ 且每个数只出现一次,并使得 $\operatorname{mex}(M)$ 最小。 如果有多组答案,输出任意一组都可以。

说明/提示

对于第一个测试用例,如果我们将 $p = [2, 0, 1]$,则 $M = \{\operatorname{mex}(2, 0)\} = \{1\}$。这时 $\operatorname{mex}(M) = 0$。 对于第三个测试用例,如果我们将 $p = [0, 2, 1, 3]$,则 $M = \{\operatorname{mex}(0, 2), \operatorname{mex}(2, 1), \operatorname{mex}(1, 3), \operatorname{mex}(0), \operatorname{mex}(3)\} = \{1, 0, 0, 1, 0\}$,这时 $\operatorname{mex}(M) = 2$。 对于第四个测试用例,若我们取 $p = [2, 0, 1, 3, 4]$,则 $M = \{\operatorname{mex}(1, 3, 4), \operatorname{mex}(2), \operatorname{mex}(0, 1, 3), \operatorname{mex}(4)\} = \{0, 0, 2, 0\}$,这时 $\operatorname{mex}(M) = 1$。 对于第五个测试用例,若 $p = [3, 1, 0, 2]$,则 $M = \{\operatorname{mex}(3, 1, 0), \operatorname{mex}(1, 0, 2)\} = \{2, 3\}$,这时 $\operatorname{mex}(M) = 0$。 由 ChatGPT 5 翻译