/* scanf("%d+i%d",&s,&x);//巧用scanf接受含有数字的字符串 优先队列默认从大到小排序 */ #include <iostream> #include <queue> using namespace std; struct Complex { int a; int b; bool operator<(Complex c) const{ if(a*a+b*b==c.a*c.a+c.b*c.b) return b>c.b;//模相等则虚部从小到大排 else { return a*a+b*b<c.a*c.a+c.b*c.b;//模不等则模从大到小排 } } }; int main() { int n; while(cin>>n) { priority_queue<Complex> q; for(int i=1;i<=n;i++) { string tmp;cin>>tmp; if(tmp=="Pop") { if(q.empty())cout<<"empty"<<endl; else { Complex t=q.top(); q.pop(); cout<<t.a<<"+i"<<t.b<<endl; cout<<"SIZE = "<<q.size()<<endl; } } else { int s,x; scanf("%d+i%d",&s,&x);//巧用scanf接受含有数字的字符串 Complex t; t.a=s;t.b=x; //int jia; //jia=str.find('+'); //t.a=str.substr(0,jia)-'0;//子串开始索引,子串长度 //t.b=str.substr(jia+2)-'0'; q.push(t); cout<<"SIZE = "<<q.size()<<endl; } } } }