J - MANAGER(2.4.5)
Description
- a x - add to the queue the process with the cost x;
- r - remove a process, if possible, from the queue according to the current manager policy;
- p i - enforce the policy i of the manager, where i is 1 or 2. The default manager policy is 1
- e - ends the list of requests.
There are two manager policies:
- 1 - remove the minimum cost process
- 2 - remove the maximum cost process
The manager will print the cost of a removed process only if the ordinal number of the removed process is in the removal list.
Your job is to write a program that simulates the manager process.
Input
- the maximum cost of the processes
- the length of the removal list
- the removal list - the list of ordinal numbers of the removed processes that will be displayed; for example 1 4 means that the cost of the first and fourth removed processes will be displayed
- the list of requests each on a separate line.
Each data set ends with an e request. The data sets are separated by empty lines.
Output
An example is given in the following:
Sample Input
5 2 1 3 a 2 a 3 r a 4 p 2 r a 5 r e
Sample Output
2 5
//数据集合之间有空行。#include<iostream> #include<algorithm> using namespace std; int a[10000],i,b[10000],c,j,k,p,j1,mn,qq[100]; int n,m; char s; void shanchu() { n++; sort(a,a+k); if(p==1) { for(i=0;i<j1;i++) if(n==b[i]) {qq[mn]=a[0];mn++;break;} a[0]=999999; } else { for(i=k-1;i>=0;i--) if(a[i]!=999999) { m=a[i]; a[i]=999999; break; } for(i=0;i<j1;i++) if(n==b[i]) {qq[mn]=m;mn++;} } } int main() { while(cin>>n&&n) { mn=0; n=0; cin>>j1; j=0; i=j1; k=0; p=1; while(i--) cin>>b[i]; while(cin>>s) { if(s=='e') break; switch(s) { // case 'e':break; case 'a':cin>>a[k],k++;break; case 'r':shanchu();break; case 'p':cin>>p;break; } } for(i=0;i<j1;i++) cout<<qq[i]<<endl; } cout<<endl; return 0; }