CodeForces
来源:互联网 发布:淘宝pc 编辑:程序博客网 时间:2024/05/20 06:08
传送门
优先队列在语法(推入,删除)上与普通队列一样,不同在于声明时要这样:priority_queue
#include<cstdio>#include<queue>#include<cstring>using namespace std;const int maxn=1000005;struct node{ char ch; int x;}op[maxn];int main(){ priority_queue<int,vector<int>,greater<int> >q;//优先队列的严格声明方式. int n,i,k=0,u;//默认该队列中最小的数为优先级最高的数,即q.top=q.min. char s[10]; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",s); if(s[0]=='i') { scanf("%d",&u); op[k].x=u; op[k++].ch='i'; q.push(u); } else if(s[0]=='r') { if(q.empty()){//防止队列为空时,该操作非法; op[k].x=0; op[k++].ch='i'; q.push(0); } q.pop(); op[k++].ch='r'; } else{ scanf("%d",&u);//u就是目标数. if(!q.empty()&&q.top()==u) { op[k].x=u; op[k++].ch='g'; } else if(!q.empty()&&q.top()>u) { op[k].x=u; op[k++].ch='i'; q.push(u); op[k].x=u; op[k++].ch='g'; } else{ while(!q.empty()&&q.top()<u)//删到队列中最小的数小于目标数为止. { op[k].x=q.top(); op[k++].ch='r'; q.pop(); } if(!q.empty()&&q.top()>u || q.empty()) { op[k].x=u; op[k++].ch='i'; q.push(u); } op[k].x=u; op[k++].ch='g'; } } } printf("%d\n",k);//总共最少步骤 for(int i=0;i<k;i++) { if(op[i].ch=='i') printf("insert %d\n",op[i].x); else if(op[i].ch=='r') printf("removeMin\n"); else printf("getMin %d\n",op[i].x); }}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- 在finder中显示隐藏文件
- 获取某一目录下某一类文件的文件名(QDir)
- Python机器学习应用 | 监督学习
- 搬砖中的小事(四)之工具--通过打开的文件进入其所在的目录配置
- imgproc模块—圆形和矩形边界
- CodeForces
- Android Coding 利器 之 掌握小技巧,助你Coding更上一层楼~
- Android嵌套滑动机制(NestedScrolling)
- JIT技术
- mysql提高快速插入数据的方法
- MySQL过滤数据.md
- 流
- 找工作不看钱,其实还应该看这些!
- Linux上如何查看某个进程的线程