P6940 [ICPC 2017 WF] Visual Python++
题目描述
在最近提出的 Visual Python++ 编程语言中,一个语句块被表示为一个字符矩形,其左上角位于第 $r_{1}$ 行第 $c_{1}$ 列,右下角位于第 $r_{2}$ 行第 $c_{2}$ 列。所有满足 $r_{1} \le r \le r_{2}$ 且 $c_{1} \le c \le c_{2}$ 的位置 $(r , c)$ 的字符都被认为属于该语句块。在这些位置中,满足 $r = r_{1}$ 或 $r = r_{2}$ 或 $c = c_{1}$ 或 $c = c_{2}$ 的位置称为边界。
语句块可以嵌套(一个矩形包含在另一个矩形内)到任意深度。在一个语法正确的程序中,任意两个语句块要么是嵌套的(一个包含另一个),要么是不相交的(不重叠)。在这两种情况下,它们的边界都不能重叠。
程序员不需要画出典型程序中的许多矩形——这太耗时了,而且 Visual Python++ 将没有机会成为下一届 ICPC 编程语言。因此,程序员只需要在矩形的左上角放置一个字符 `「`,在右下角放置一个字符 `」`。语法分析器将自动匹配相应的角以获取程序的嵌套结构。
你的团队刚刚获得了一份五小时的合同,来开发语法分析器的这一部分。
输入格式
输入的第一行包含一个整数 $n (1 \le n \le 10^{5})$,表示角对的数量。
接下来的 $n$ 行每行包含两个整数 $r$ 和 $c (1 \le r , c \le 10^{9})$,表示在正在解析的程序中,第 $r$ 行第 $c$ 列有一个左上角。
接下来 $n$ 行,以相同的方式指定右下角。所有角的位置都是不同的。
输出格式
输出 $n$ 行,每行包含一个整数。第 $i$ 行的数字 $j$ 表示第 $i$ 个左上角与第 $j$ 个右下角组成一个矩形。左上角和右下角均按照它们在输入中出现的顺序从 $1$ 到 $n$ 编号。输出必须是 $1$ 到 $n$ 的一个排列,使得匹配后的矩形正确嵌套。如果有多个有效的匹配,输出任何一个均可。如果不存在这样的匹配,则输出 `syntax error`。
说明/提示
翻译由 DeepSeek R1 完成