QOJ.ac

QOJ

Time Limit: 6 s Memory Limit: 1024 MB Total points: 24

#5921. Erdős–Szekeres

Statistics

给定一个由数字 $(1, 2, \dots, N)$ 组成的列表 $X$,一个递增子序列是这些数字中按递增顺序排列的子集,而一个递减子序列是这些数字中按递减顺序排列的子集。例如,$(5, 7, 8)$ 是 $(4, 5, 3, 7, 6, 2, 8, 1)$ 的一个递增子序列。

大约 80 年前,两位数学家 Paul Erdős 和 George Szekeres 证明了一个著名的结论:$X$ 必然存在一个长度至少为 $\sqrt{N}$ 的递增子序列,或者一个长度至少为 $\sqrt{N}$ 的递减子序列。例如,$(4, 5, 3, 7, 6, 2, 8, 1)$ 包含一个长度为 4 的递减子序列:$(5, 3, 2, 1)$。

我正在教授一门组合数学课,我想通过示例向学生“证明”这个定理。对于序列中的每个数字 $X[i]$,我将计算两个值:

  • $A[i]$:以 $X[i]$ 为最大值的 $X$ 的最长递增子序列的长度。
  • $B[i]$:以 $X[i]$ 为最大值的 $X$ 的最长递减子序列的长度。

我证明的关键在于,对于每个 $i$,数对 $(A[i], B[i])$ 都是唯一的,这意味着对于某个 $i$,必然有 $A[i]$ 或 $B[i]$ 至少为 $\sqrt{N}$。对于上述序列,所有的 $A[i]$ 和 $B[i]$ 值如下:

$i$ $X[i]$ $A[i]$ $B[i]$
0 4 1 4
1 5 2 4
2 3 1 3
3 7 3 4
4 6 3 3
5 2 1 2
6 8 4 2
7 1 1 1

我想出了一个非常有趣的序列来演示这个事实,并计算了每个 $i$ 的 $A[i]$ 和 $B[i]$,但我忘记了原始序列是什么。给定 $A[i]$ 和 $B[i]$,你能帮我重构 $X$ 吗?

$X$ 应该由数字 $(1, 2, \dots, N)$ 以某种顺序组成。如果存在多个可能的序列,你应该选择字典序最小的那一个。这意味着 $X[0]$ 应该尽可能小,如果仍然有多个解,则 $X[1]$ 应该尽可能小,依此类推。

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例,每个测试用例包含三行。

每个测试用例的第一行包含一个整数 $N$。第二行包含 $N$ 个用空格分隔的正整数,表示 $A[0], A[1], \dots, A[N-1]$。第三行包含 $N$ 个用空格分隔的正整数,表示 $B[0], B[1], \dots, B[N-1]$。

输出格式

对于每个测试用例,输出一行 "Case #x: ",后跟按顺序排列的 $X[0], X[1], \dots, X[N-1]$,并用空格分隔。

数据范围

$1 \le T \le 30$。 保证至少存在一个可能的 $X$ 解。

小数据集(测试集 1 - 可见;9 分)

$1 \le N \le 20$。

大数据集(测试集 2 - 隐藏;15 分)

$1 \le N \le 2000$。

样例

输入格式 1

2
1
1
1
8
1 2 1 3 3 1 4 1
4 4 3 4 3 2 2 1

输出格式 1

Case #1: 1
Case #2: 4 5 3 7 6 2 8 1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.