两个优先队列:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <string>
#define LL long long
#define DB double
#define SF scanf
#define PF printf
#define N 1000009
using namespace std;
int v[N];
struct mx{
int k,p,c;
bool operator<(const mx t)const
{
return p<t.p;
}
};
struct mi{
int k,p,c;
bool operator<(const mi t)const
{
return p>t.p;
}
};
priority_queue<mx> px;
priority_queue<mi> pi;
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int n,a,b;
mx a1;mi b1;
while(~SF("%d",&n)&&n)
{
if(n==1)
{
SF("%d%d",&a,&b);
a1.k = a;a1.p = b; a1.c = v[a];
b1.k = a;b1.p = b; b1.c = v[a];
px.push(a1);
pi.push(b1);
}else if(n==2)
{
int ou = 0;
while(!px.empty())
{
a1 = px.top();
px.pop();
if(v[a1.k]==a1.c)
{
v[a1.k]++;
ou=1;
PF("%d\n",a1.k);
break;
}
}
if(!ou) PF("0\n");
}else
{
int ou = 0;
while(!pi.empty())
{
b1 = pi.top();pi.pop();
if(v[b1.k]==b1.c)
{
v[b1.k]++;
ou = 1;
PF("%d\n",b1.k);
break;
}
}
if(!ou) PF("0\n");
}
}
return 0;
}