题目描述
本题译自 eJOI2022 Problem F. LCS of Permutations
对于两个序列 x,y,定义 LCS(x,y) 为它们最长公共子序列的长度。
给定四个整数 n,a,b,c。确定是否存在三个长度为 n 的从 1 到 n 的整数的排列 p,q,r,满足:
- LCS(p,q)=a
- LCS(p,r)=b
- LCS(q,r)=c
如果这样的排列存在,找出这样排列的三元组。
从 1 到 n 的整数排列 p 是一个长度为 n 的序列,序列中所有元素都在 [1,n] 中并且两两不同。例如,(2,4,3,5,1) 是一个从 1 到 5 的整数排列,而 (1,2,1,3,5),(1,2,3,4,6) 不是。
如果一个序列 d 可以通过删除一些(可能不删,也可能删除全部)元素得到序列 c,则称序列 c 是序列 d 的子序列。例如 (1,3,5) 是 (1,2,3,4,5) 的一个子序列,而 (3,1) 不是。
序列 x 和 y 的最长公共子序列是满足同时为 x 和 y 的子序列中最长的一个。例如,x=(1,3,2,4,5) 和 y=(5,2,3,4,1) 的最长公共子序列是 z=(2,4),因为它是两个序列的子序列,并且是最长的。LCS(x,y) 是最长公共子序列的长度,上述例子中这个值为 2。
输入格式
第一行包含一个整数 t (1≤t≤105),表示测试点个数。每个测试点描述如下。
每组测试点只有一行,包含五个整数 $n,a,b,c,output\ (1\le a\le b\le c\le n\le 2\cdot 10^5,0\le output\le 1)$。
如果 output=0,只需要确定这样的排列是否存在。如果 output=1,如果这样的排列存在,你还要输出这样排列的三元组。
保证一组测试数据中所有测试点的 n 的总和不超过 2⋅105。
输出格式
对于每个测试点,如果这样的排列 p,q,r 存在,输出 YES,否则输出 NO。如果 output=1,并且这样的排列存在,再输出三行:
第一行输出 n 个整数 p1,p2,…,pn,表示排列 p。
第二行输出 n 个整数 q1,q2,…,qn,表示排列 q。
第三行输出 n 个整数 r1,r2,…,rn,表示排列 r。
如果有多个这样的三元组,输出任意一个即可。
对于每个字母,你可以输出任何大小写情况。(例如,YES,Yes,yes,yEs 都会被判定为正向答案。)
8
1 1 1 1 1
4 2 3 4 1
6 4 5 5 1
7 1 2 3 1
1 1 1 1 0
4 2 3 4 0
6 4 5 5 0
7 1 2 3 0
YES
1
1
1
NO
YES
1 3 5 2 6 4
3 1 5 2 4 6
1 3 5 2 4 6
NO
YES
NO
YES
NO
评分
详细子任务附加限制及分值如下表所示。
| 子任务编号 |
附加限制 |
分值 |
| 1 |
a=b=1,c=n,output=1 |
3 |
| 2 |
n≤6,output=1 |
8 |
| 3 |
c=n,output=1 |
10 |
| 4 |
a=1,output=1 |
17 |
| 5 |
output=0 |
22 |
| 6 |
output=1 |
40 |