【from new_dtoj 3965: 序列(seq)】
题目描述
给定 N,A,B,构造一个长度为 N 的排列,使得:
排列长度为 N;
最长上升子序列长度为 A;
最长下降子序列长度为 B。
输入
第一行一个整数 T (1≤T≤10), 表示数据组数.
接下来 T 行,每行三个正整数 N、A、B。
输出
对每组数据:
如果有解,输出两行,第一行一个字符串 Yes,接下来一行 N 个整数,表示排列。
否则, 输出一行一个字符串 No。
样例输入
3
4 2 2
4 4 1
4 3 3
样例输出
Yes
3 4 1 2
Yes
1 2 3 4
No
提示
数据范围和子任务
对于全部的测试数据,保证T≤10,N≤105,∑N≤2×105
子任务 1(20 分):N≤5 .
子任务 2(30 分):每组数据均满足 N=A×B .
子任务 3(20 分):B≤2 .
子任务 4(30 分):无特殊限制
题解如下:
显然当A+B>n+1时,无解
由于子任务2联想到可以构造出1条长度为B的下降序列,并且这一条序列上的每个点都是一条长度至多为A的上升序列。故当A*B<n时,也是无解的情况,剩下的情况就可以按照上述方法构造,即 3 2 1