#1382. Pku2448 A New Operating System

Pku2448 A New Operating System

Description

最近阳阳接下了一个任务:编写一个操作系统。

编写操作系统可是一个大工程,阳阳花费了很多时间在上面,他本想很快完成的,但是IOI在即,再怎么样也不能耽误了世界赛啊!但是雇主的要求有很严格,要求阳阳一定要在IOI之前完成这个系统的编写,所以他不得不找到你请求帮助,人多力量大嘛,你就帮帮他咯。

你的任务很简单,只要编写一个内存管理系统就可以了。你的程序需要支持以下9个操作:

CreateProcess(PID,Memory,Priority):新建一个过程,编号为PID,其占用的内存为Memory,优先级(称为外部优先级)为Priority;

AddMessage(PID,Priority):在过程PID中新建一个任务,其优先级(称为内部优先级)为Priority;

Run:在当前所有任务中间找出一个优先级最高的运行并输出’Run: Priority’,这里的优先级定义为其内部优先级与外部优先级的积,如果两个任务的优先级一样则优先运行PID较小的任务,如果没有任何任务则输出’Empty’;

ChangePriority(PID,NewValue):将过程PID的外部优先级改变为NewValue;

GetMemory(PID,Memory):将过程PID的内存占用增加Memory;

FreeMemory(PID,Memory):将过程PID的内存占用减少Memory;

RunProcess(PID):将过程PID中找出一个内部优先级最高的运行并输出’Run Process: Priority’,如果该过程中如果没有任何任务则输出’Empty’;

CloseMaxMemory:将当前所有过程中内存占用最高的过程关闭,占用内存一样则选择PID较小的关闭,如果当前没有任何过程则输出’Empty’;

CloseProcess(PID):将过程PID关闭。

PS:

  1. 任务运行后自动被删除;
  2. 对于CreateProcess,如果PID已经存在则输出’Error’,对于其他操作,如果PID不存在则输出’Error’,这种情况下该操作将被忽略;
  3. 当一个过程的内存占用小于等于0时则该过程将被自动关闭;

Format

Input

第一行一个正整数N,表示操作总数,开始内存中过程为空;

然后N行每行按照如上格式描述一个任务;

Output

按照如上描述输出。

Samples

11
CloseMaxMemory
CreateProcess(1,100,1)
CreateProcess(2,200,1)
CreateProcess(3,300,1)
AddMessage(1,9)
AddMessage(2,19)
AddMessage(1,10)
GetMemory(2,999)
CloseMaxMemory
Run
RunProcess(1)
Empty
Run: 10
Run Process: 9

Limitation

0 < N <= 100,000

对于65%的数据范围N <= 1,000;

对于90%的数据范围将只出现CreateProcess、AddMessage、Run、RunProcess操作;

对于90%的数据PID的范围为[1 .. N];