题意:给定 n 个按顺序的命令,但是可能有的命令不全,让你补全所有的命令,并且要求让总数最少。

析:没什么好说的,直接用优先队列模拟就行,insert,直接放入就行了,removeMin,就得判断一下队列是不是空的,然后再考虑getMin,这个是不是对应的值,如果队列中首元素比它大,那么就加上一个,

如果相等直接取出,如果小于就不断取队列中最小元素。

代码如下:

#include <bits/stdc++.h>

using namespace std;
char s[15], t[30];
vector<string> ans; int main(){
int n, x;
while(cin >> n){
ans.clear();
priority_queue<int, vector<int>, greater<int> > q;
for(int i = 0; i < n; ++i){
scanf("%s", s); if(s[0] == 'i'){
scanf("%d", &x);
sprintf(t, "insert %d", x);
ans.push_back(string(t));
q.push(x);
}
else if(s[0] == 'r'){
if(q.empty()){
ans.push_back("insert 1");
q.push(1);
}
ans.push_back("removeMin");
q.pop();
}
else{
scanf("%d", &x);
while(true){
if(q.empty() || q.top() > x){
q.push(x);
sprintf(t, "insert %d", x);
ans.push_back(string(t));
}
else if(q.top() == x){ break; }
else{
ans.push_back("removeMin");
q.pop();
}
}
sprintf(t, "getMin %d", x);
ans.push_back(string(t));
}
}
printf("%d\n", ans.size());
for(int i = 0; i < ans.size(); ++i)
cout << ans[i] << endl;
}
return 0;
}

最新文章

  1. DFS序+线段树 hihoCoder 1381 Little Y&#39;s Tree(树的连通块的直径和)
  2. 活用UML-软件设计高手(广州 2014年6月14-15日)
  3. hibernate4学习
  4. 【读书笔记】iOS网络-Web Service协议与风格
  5. Visual Studio: How to change ipch path in Visual Studio 2010 (.sdf, *.opensdf, ...)
  6. c3p0数据库连接池
  7. NSArray和NSDictionary添加空对象,以及nil和Nil和NULL和NSNull
  8. Mysql错误问题记录
  9. Ununtu 12.04 gedit安装插件Source Code Browser
  10. Python 日期格式化 及 schwartzian排序
  11. MM32 RTC学习(兼容STM32)
  12. struct 如何存储指针类型的值
  13. OpenID Connect + OAuth2.0
  14. java游戏开发杂谈 - 事件处理
  15. 【English Email】CIP payouts now in Workday
  16. Xcode自动选择证书
  17. 实现域名访问网站—nginx反向代理
  18. jstl格式化日期
  19. BOOST 之filesystem, path
  20. 对一个 复杂的json结果进行取值的例子

热门文章

  1. enq:TM-contention
  2. START WITH...CONNECT BY PRIOR详解
  3. TCP 三次握手 四次握手
  4. cookies,sessionStorage,localStorage的区别
  5. OD 实验(十七) - 对一个程序的逆向分析
  6. Tkinter Relief styles(样式)
  7. 简单获取各大视频网站的flash地址
  8. 第六篇 Flask 中内置的 Session
  9. Keil MDK 和 IAR 两款ARM开发工具区别比较
  10. 完美解决 开机无法启动 提示0xc000000e