您的位置:首页 > 其它

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++):

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