#P13296. [GCJ 2013 #2] Erdős–Szekeres
[GCJ 2013 #2] Erdős–Szekeres
Description
给定一个数列 ,其内容为 。一个递增子序列是指这些数字中按递增顺序出现的某个子集;递减子序列则是按递减顺序出现的子集。例如, 是 的一个递增子序列。
大约 80 年前,两位数学家 Paul Erdős 和 George Szekeres 证明了一个著名结论: 一定存在长度至少为 的递增子序列,或长度至少为 的递减子序列。例如, 有一个长度为 的递减子序列 。
我正在教授组合数学课程,想通过实例“证明”这个定理。对于序列中每个 ,我会计算两个值:
- :包含 且以 为最大值的最长递增子序列的长度。
- :包含 且以 为最大值的最长递减子序列的长度。
我的证明关键在于,对于每个 , 这对值都是不同的,这就意味着对于某个 , 或 至少有一个不小于 。对于上面的序列,所有 和 的值如下表:
| 0 | 4 | 1 | 4 |
| 1 | 5 | 2 | |
| 2 | 3 | 1 | 3 |
| 3 | 7 | 3 | 4 |
| 4 | 6 | 3 | |
| 5 | 2 | 1 | 2 |
| 6 | 8 | 4 | |
| 7 | 1 | ||
我曾经设计了一个很有趣的数列来演示这个事实,并且为每个 计算了 和 ,但后来却忘记了原始的数列是什么。现在,给定 和 ,你能帮我还原出 吗?
应该是 的某种排列。如果有多种可能的数列,请输出字典序最小的那一个。也就是说, 应尽量小,如果还有多种方案,则 尽量小,依此类推。
Input Format
输入的第一行为测试用例数 。接下来有 个测试用例,每个测试用例包含三行。
每个测试用例的第一行为一个整数 。第二行为 个正整数,依次为 。第三行为 个正整数,依次为 。
Output Format
对于每个测试用例,输出一行 "Case #x: ",后接 ,用空格分隔。
2
1
1
1
8
1 2 1 3 3 1 4 1
4 4 3 4 3 2 2 1
Case #1: 1
Case #2: 4 5 3 7 6 2 8 1
Hint
限制条件
- 保证至少存在一个可行解
小数据集(9 分,测试集 1 - 可见)
大数据集(15 分,测试集 2 - 隐藏)
翻译由 ChatGPT-4.1 完成。
京公网安备 11011102002149号