POJ1281
2016-03-29 17:52
274 查看
Problem: MANAGER
Description: 进程队列管理。a-加入进程值为x的进程;p-修改移除时的标志,1表示移除最小值,2表示移除最大值,默认为1;r表示移除最大值或者最小值。然后给你一个移除数组,数组的意思表示要你输出第array[i]次移除的值。
Solution: 模拟,我们用数组来模拟,定义head, tail。这个表示队列中有用的数据。每次加入往数组中加入数字就进行排序,如果移除最大值就tail–,最小值就head++。
Code(C++):
Description: 进程队列管理。a-加入进程值为x的进程;p-修改移除时的标志,1表示移除最小值,2表示移除最大值,默认为1;r表示移除最大值或者最小值。然后给你一个移除数组,数组的意思表示要你输出第array[i]次移除的值。
Solution: 模拟,我们用数组来模拟,定义head, tail。这个表示队列中有用的数据。每次加入往数组中加入数字就进行排序,如果移除最大值就tail–,最小值就head++。
Code(C++):
#include <iostream> #include <string> #include <algorithm> using namespace std; const int M=10005; int n,L; int top; int line[M]; int ans[M]; int array[M]; int head,tail; int main() { while(cin>>n){ cin>>L; for(int i=0;i<L;i++) cin>>line[i]; string tmp; top=0; head=tail=0; int flag=1; int value; while(cin>>tmp,tmp.at(0)!='e'){ switch(tmp.at(0)){ case 'a': cin>>value; array[tail++]=value; sort(array+head,array+tail); break; case 'r': if(head==tail){ ans[top++]=-1; break; } flag==1? head++:tail--; ans[top++]=flag==1? array[head-1]:array[tail]; break; case 'p': cin>>value; flag=value; 4000 break; default: break; } } for(int i=0;i<L;i++) cout<<ans[line[i]-1]<<endl; cout<<endl; } return 0; }
相关文章推荐
- 科大讯飞--让你的APP学会说学逗唱
- hashmap和ConcurrentHashMap相关问题
- Laravel5入门
- android 用canvas绘制虚线
- 无限轮播 实现原理
- HDU1051切割木头
- Tomcat6的项目迁移到weblogic11g时报错
- delphi locate多字段查询
- Nginx 503错误总结
- SpringMVC使用中遇到的问题总结
- html5--canvas学习笔记
- 20135220谈愈敏Linux Book_18
- jsp中标签id和name的区别
- HUD 4704 Sum 费马小定理和快速幂
- VPC学习笔记
- Hadoop Rack Aware 机架感知
- SDWebImage实现原理
- 矢量量化神经网络,自组织竞争神经网络,自组织映射网络
- Asp.Net Repeater的两层嵌套以及遍历取值的简单实现(checkbox)
- React.js实现原生js拖拽效果及思考