CF59D Team Arrangement

题目描述

最近,Berland 州立大学奥林匹克程序训练中心的个人训练课程已经结束。根据这些训练课程的成绩,将为即将到来的团队竞赛季组建队伍。每支队伍由三个人组成。训练中心的所有学生编号从 $1$ 到 $3n$,所有队伍编号从 $1$ 到 $n$。学生分队的方式如下:只要还有没有被分到队伍的人,就从中选出总分最高的那个人作为新队伍的队长,这个人按照他自己的优先级列表,从剩下的人中选择两名队友。每个人的优先级列表是由除了自己以外的其他 $3n-1$ 个学生的一个排列组成。 给定个人训练成绩的结果,这是一个 $1$ 到 $3n$ 的排列,其中第 $i$ 个数字表示获得第 $i$ 名的学生编号。每个学生的名次都是唯一的。还给出了已经组建好的队伍的组成,顺序即为这些队伍被创建的顺序。你的任务是确定编号为 $k$ 的学生的优先级列表。如果存在多种可能的优先级列表,选择字典序最小的那个。

输入格式

第一行包含一个整数 $n$,表示组成的队伍数量($1 \le n \le 10^5$)。 第二行包含 $3n$ 个以空格分隔的整数,按顺序给出每位学生的比赛成绩,是 $1$ 到 $3n$ 的一个排列。 接下来有 $n$ 行,每行包含 $1$ 到 $3n$ 中的三个整数,表示一支队伍的成员。这三个人的顺序不限,但每支队伍所在的行顺序即为其被创建的顺序。保证每个学生恰好属于一支队伍,并且学生的分组确实能够按照题目的规则被分配出来。 最后一行包含一个整数 $k$($1 \le k \le 3n$),表示要为第 $k$ 号学生输出优先级列表。

输出格式

输出 $3n-1$ 个整数,表示第 $k$ 号学生的优先级列表,应为字典序最小的方案。 字典序的比较方式为现代编程语言中的标准 $

说明/提示

由 ChatGPT 5 翻译