#P3481. Double Queue

Double Queue

描述

新成立的巴尔干投资集团银行(BIG-Bank)在布加勒斯特开设了一个新办事处,配备了由IBM罗马尼亚提供的现代化计算环境,并采用先进的信息技术。与往常一样,银行的每位客户由一个正整数 K 标识,当客户到银行办理业务时,会获得一个正整数优先级 P。银行年轻经理们的一项创新提议震惊了服务系统的软件工程师:他们建议有时呼叫优先级最低的客户,而非优先级最高的客户。因此,系统将接收以下类型的请求:

  • 0:系统停止服务
  • 1 K P:将客户 K 加入等待列表,优先级为 P
  • 2:服务优先级最高的客户,并将其从等待列表中移除
  • 3:服务优先级最低的客户,并将其从等待列表中移除

你的任务是帮助银行的软件工程师编写一个程序,实现这一服务策略。

输入

输入的每一行包含一个可能的请求;只有最后一行是停止请求(代码0)。可以保证,当请求将新客户加入列表时(代码1),列表中不会存在相同客户或相同优先级的其他请求。客户标识 K 始终小于10^6,优先级 P 始终小于10^7。同一客户可能多次到访,每次可能获得不同的优先级。

输出

对于每个代码为2或3的请求,程序需在标准输出的单独一行中打印被服务客户的标识。如果请求到达时等待列表为空,则程序输出0。

输入样例 1

2
1 20 14
1 30 3
2
1 10 99
3
2
2
0

输出样例 1

0
20
30
10
0

来源

Southeastern Europe 2007