UVA1760 Visual Python++
题目描述
在最近提出的 Visual Python++ 编程语言中,一组语句被表示为一个字符矩形,其左上角位于第 $r_1$ 行和第 $c_1$ 列,右下角位于第 $r_2$ 行和第 $c_2$ 列。所有位于位置 $(r,c)$ 处的字符,其中 $r_1\le r\le r_2$ 且 $c_1\le c\le c_2$,都被认为属于该块。在这些位置中,$r=r_1$ 或 $r=r_2$ 或 $c=c_1$ 或 $c=c_2$ 的称为边界。
语句块可以嵌套(包含在其他矩形内)到任意层级。在一个语法正确的程序中,每两个语句块要么嵌套(一个包含在另一个中),要么不相交(不重叠)。在这两种情况下,它们的边界不得重叠。
程序员不需要绘制典型程序中包含的许多矩形——这太费时了,而且 Visual Python++ 不会有机会成为下一个 ICPC 编程语言。因此,程序员只需在矩形的左上角放一个字符 `⌜`,在右下角放一个字符 `⌟`。解析器将自动匹配适当的角来获取程序的嵌套结构。
您的团队刚刚被授予了一个五小时的合同来开发解析器的这部分功能。
输入格式
输入文件包含多组,每组数据如下所述。
输入的第一行包含一个整数 $n(1 ≤ n ≤ 105)$,表示角对的数量。接下来的 $n$ 行中,每行包含两个整数 $r$ 和 $c(1 ≤ r,c ≤ 109)$,指定您正在解析的程序中存在一个左上角在第 $r$ 行第 $c$ 列的矩形。随后的 $n$ 行以相同的方式指定了右下角。所有角的位置都是不同的。
输出格式
对于每组数据,输出必须遵循以下描述。
显示 $n$ 行,每行包含一个整数。第 $i$ 行中的数字 $j$ 表示第 $i$ 个左上角和第 $j$ 个右下角形成一个矩形。左上角和右下角分别按它们在输入中出现的顺序从 $1$ 到 $n$ 编号。输出必须是从 $1$ 到 $n$ 的数字的排列,以使匹配结果为正确嵌套的矩形。如果有多个有效匹配,任何一个都将被接受。如果不存在这样的匹配,请显示 `syntax error`。
说明/提示
- $1\le n\le 10^5$
- $1\le r,c \le 10^9$