题目描述
给定一个整数 n 和 m 个区间。每个区间的形式为 [li,ri],满足 1≤li≤ri≤n。注意,区间可以重复。
定义 p 为长度为 n 的一个排列,包含所有整数 0,1,2,…,n−1,且每个只出现一次。
有一个多重集合 M,最初为空。
对于每个区间 [li,ri]:
- 考虑子数组 p[li…ri],
- 计算 vi=mex(p[li…ri]),
- 将 vi 插入到 M 中。
处理完所有区间后,M={v1,v2,…,vm}。
你的任务是构造一个长度为 n 的排列 p,包含所有 0,1,2,…,n−1,使得 mex(M) 最小。
mex(a) 表示数组 a 的最小未出现的非负整数。例如,mex([2,2,1])=0,因为 0 没有出现在数组中;而 mex([0,3,1,2])=4,因为 0、1、2、3 都出现了,但 4 没有出现。
输入格式
第一行包含一个整数 t(1≤t≤1000)——表示测试用例的组数。每组测试用例的描述如下。
每组测试用例的第一行包含两个整数 n 和 m(3≤n≤3000,1≤m≤3000)。
接下来的 m 行,每行包含两个用空格分隔的整数 li,ri(1≤li≤ri≤n),表示一个区间。
保证所有测试用例中 n 的总和不超过 3000,m 的总和也不超过 3000。
输出格式
对于每个测试用例,输出一行,包含 n 个两两不同的整数 p1,p2,…,pn,即排列 p,需满足 0≤pi<n 且每个数只出现一次,并使得 mex(M) 最小。
如果有多组答案,输出任意一组都可以。
样例
5
3 1
1 2
3 5
1 1
1 2
2 2
2 2
2 3
4 5
1 2
2 3
3 4
1 1
4 4
5 4
3 5
1 1
2 4
4 4
4 2
1 3
2 4
2 0 1
2 1 0
0 2 1 3
2 0 1 3 4
3 1 0 2
样例说明
对于第一个测试用例,如果我们将 p=[2,0,1],则 M={mex(2,0)}={1}。这时 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\}$,这时 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\}$,这时 mex(M)=1。
对于第五个测试用例,若 p=[3,1,0,2],则 $M = \{\operatorname{mex}(3, 1, 0), \operatorname{mex}(1, 0, 2)\} = \{2, 3\}$,这时 mex(M)=0。
由 ChatGPT 5 翻译
来源
Codeforces 2162F,英文题名 Beautiful Intervals。