维护一个平衡二叉树
#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; }