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;
}
相关文章推荐
- Linux 判断进程是否已经运行的程序
- 使用什么工具连接MySQL Server
- 面向对象进阶
- Ajax利用FormData提交文件和数据
- 思维导图整理
- Android studio 中去除应用标题栏
- 5-30 字符串的冒泡排序 (20分)
- angularJs+MVC+C#学习(一)
- 命令行打包
- ListView和RecyclerView的分类型
- 关于android的单位dp与px
- (4)
- jQuery(一)——入门
- 最小生成树
- 循环输出数据到页面
- 在Ubuntu中安装VMD
- 一位程序员工作10年总结的13个忠告,却影响了很多人
- wamp常见问题02——安装问题
- Twitter for Museums: Strategies and Tactics for Success
- JavaScript应用--自动刷新网页