题目描述
比赛分两轮。第一轮: 名选手的成绩按到达顺序给出——第 个到达的成绩属于 号选手。取成绩前 名晋级:成绩从高到低排,同分时先到达者靠前。
第二轮:晋级的 名选手()再测一次, 个成绩按晋级名单顺序给出——第 个成绩属于名单上第 人。取前 名获奖:同样成绩从高到低、同分时名单靠前者靠前。
两轮都用「单堆保前几名」技法:小根堆只留当前前 (或前 )大,超员就挤掉堆顶;「同分先到先得」靠把「成绩」和「先到次序」编进同一个 long long(高位成绩,低位一个随次序增大而减小的量)。
输入格式
第一行三个整数 、、()。
第二行 个整数 (),第 个是 号选手第一轮的成绩。
第三行 个整数 (),第 个是晋级名单第 人第二轮的成绩。
输出格式
两行:第一行 个整数,晋级名单(成绩降序、同分先到先);第二行 个整数,获奖名单(第二轮成绩降序、同分名单靠前先),均用空格分隔。
样例
输入:
5 3 3
80 90 90 70 85
60 95 88
输出:
2 3 5
3 5 2
90 分的 2、3 两人先到的 2 号排前,名单为 2 3 5;第二轮 95、88、60 分依次属于名单第 2、3、1 人,获奖 3 5 2。
数据范围
,。提示:超员挤堆顶必须配小根堆——大根堆挤掉的是最大的,保下来的就成了前 小。