您的位置:首页 > 其它

cf 681 C(模拟)

2016-07-15 21:34 211 查看
                        

                               

   链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: