維護一個平衡二叉樹
#include <stdio.h>
#include <iostream>
#include <stack>
#include <string>
#include <set>
using namespace std;
struct Guest
{
int P,K;
Guest( int pp = 0, int kk = 0 ):P(pp), K(kk){}
friend bool operator <( const Guest &a, const Guest &b )
{
return a.P < b.P;
}
};
set<Guest> record;
int request;
int main()
{
while( cin >> request, request != 0 )
{
if( request == 1 )
{
int tmpk, tmpp;
scanf("%d %d", &tmpk, &tmpp );
record.insert( Guest(tmpp, tmpk) );
}
else if( request == 2 )
{
if( !record.empty() )
{
set<Guest> ::iterator iter = record.end();
iter--;
printf("%d\n", iter->K );
record.erase(iter);
}
else
{
printf("0\n");
}
}
else if( request == 3 )
{
if( !record.empty() )
{
set<Guest> ::iterator iter = record.begin();
printf("%d\n", iter->K );
record.erase(iter);
}
else
{
printf("0\n");
}
}
}
return 0;
}