SP9689 VBWORK - Very Boring Homework
题目描述
Z教授觉得他的作业对大多数学生来说很难(你还记得“无聊的作业”任务吗?)。没想到,许多学生都交了正确的答案。他觉得这不是因为作业简单,而是因为用来测试学生的程序的数据集太小了。所以,他决定再给学生同样的作业,但这次使用非常大的测试用例。当然,学生们认为作业因此更无聊了,再次需要你帮忙。
对于那些不知道Z教授上次给学生布置了什么作业的人来说:
你需要绘制一棵二叉搜索树(BST)的图。
_二叉搜索树,也称为有序或排序二叉树,是一种基于节点的二叉树数据结构,具有以下特征:_
1. _每个节点的左子树只包含小于该节点键值的节点。_
2. _每个节点的右子树只包含大于该节点键值的节点。_
3. _左右子树也必须是二叉搜索树。_
根据给定一系列整数键值,这些键值按顺序依次插入到BST中,可以形成唯一的BST。此外,Z教授希望学生绘制这棵BST的图形。
绘制BST图形的规则如下:
1. 若BST为单节点,它的图形就是一个'o'。
2. 若BST有非空子树,则在子树根节点上方画一个'|',再在它上方画一个'+'。最后,在'+'所在行,用最少量的'-'(包括0个)连接'+'和父节点'o'。
3. 左子树(如果存在)必须画在父节点左侧,同样,右子树(如果存在)画在右侧。
4. BST根节点所在的列不应含有属于左或右子树的字符。
5. BST每个节点的左、右子树图形在整棵树中不共享同一列。
绘制完整棵BST后,我们从上到下以1开始为行编号,从左到右以1开始为列编号。
由于树的规模非常大,Z教授无法检查图中每个细节。因此,只需要提交这幅图的m个片段给教授,而不是整个图。
输入格式
第一行为测试用例数量 $T$。接下来是 $T$ 个测试用例。
每个测试用例:
第一行包含正整数 $N$ ($N \leq 100000$)。
第二行包含 $N$ 个不同的整数,这些整数在顺序插入到一个空的BST中。
第三行包含一个整数 $M$ ($M \leq 5$)。
接下来 $M$ 行,每行包含四个整数,表示所需图形片段的左上角行、列号,以及该片段的行数 $R_i$ 和列数 $C_i$。**所有输入整数为正,能用32位有符号整数表示,除了 $R_i$ 和 $C_i$,它们不超过200且大于0**。
输出格式
对于每个测试用例:
输出第一行为测试用例编号,从1开始计数。
接着输出 $M$ 个块,每个块包含最多 $R_i$ 行,每行正好 $C_i$ 个字符。用空格填充空白位置。但如果一行只包含空格,则不输出该行。
每个图形片段后输出一个空行。
**请注意输出中的空格,任何多余的空格都会导致答案错误。**
说明/提示
- $1 \leq T \leq 10$
- $1 \leq N \leq 100000$
- $1 \leq M \leq 5$
- $1 \leq R_i, C_i \leq 200$
**本翻译由 AI 自动生成**