链接:http://codeforces.com/problemset/problem/681/C
优先队列去模拟
#include <bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
char s[100],ss[100];
vector<string>v;
int main()
{
int n,val;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
{
gets(s);
int len=strlen(s);
if(s[len-1]>='0'&&s[len-1]<='9')
sscanf(s,"%s %d",ss,&val);
else
strcpy(ss,s);
if(strcmp(ss,"insert")==0)
{
q.push(val);
v.push_back(s);
}
else if(strcmp(ss,"getMin")==0)
{
if(q.empty())
{
q.push(val);
char st[100];
sprintf(st,"%d",val);
string stt="insert ";
stt+=st;
v.push_back(stt);
v.push_back(s);
}
else
{
int flag=0;
while(!q.empty())
{
if(q.top()<val) //注意当前最小值小于要查找时要删去直到大于等于它
{
q.pop();
string stt="removeMin";
v.push_back(stt);
}
else if(q.top()==val)
{
flag=1;
v.push_back(s);
break;
}
else
break;
}
if(!flag)
{
char st[100];
sprintf(st,"%d",val);
q.push(val);
string stt="insert ";
stt+=st;
v.push_back(stt);
v.push_back(s);
}
}
}
else
{
if(!q.empty())
{
q.pop();
v.push_back(s);
}
else
{
string stt="insert 1";
v.push_back(stt);
v.push_back(s);
}
}
}
cout<<v.size()<<endl;
for(int i=0;i<v.size();i++)
cout<<v[i]<<endl;
return 0;
}