问题 5364 --内存管理

5364: 内存管理

题目描述

计算机的内存被分割成 $30000$ 个相同大小的内存块,这些内存块被依次编号为 $1,2,3,\cdots,29998,29999,30000$。申请或访问的内存块编号必须是整数。 当某申请或访问内存时,该会向系统发送一条消息: 1、$x+$ 表示在第 $x$ 秒向系统发送一条申请内存的消息; 2、$x.y$ 表示在第 $x$ 秒向系统发送一条访问第 $y$ 块内存的消息。 程序开始时,所有内存块均处于空闲状态。 对于申请内存的消息,系统会将编号最小的空闲内存块中分配掉,该内存块转变为被占用状态。对于访问内存的消息,若当前内存块处于被占用状态,则系统会反馈一个 `+`,否则反馈一个 `-`。对于任何被占用的内存块,若在 $600$ 秒内无任何操作,则该内存块将重新变为空闲状态。 内存管理系统是十分复杂的,我们要求你编写一个程序,来模拟内存管理操作。

输入

输入文件包含若干行,每行描述一条消息,消息共有两种: 1、 $x+$ 2、 $x.y$ 保证 $x$ 按照非递减顺序出现,对于在同一时刻发出的消息,按照输入顺序处理。

输出

对于每条申请内存的消息,输出系统分配掉的内存块编号。 对于每条访问内存的消息,输出`+`或`-`表示该内存块是否被占用。

样例输入输出

输入#1 复制
1 +
1 +
1 +
2 . 2
2 . 3
3 . 30000
601 . 1
601 . 2
602 . 3
602 +
602 +
1202 . 2
输出#1 复制
1
2
3
+
+
-
-
+
-
1
3
-

提示

样例解释 对于前 $3$ 条申请内存的消息,系统依次将 $1、2、3$ 号内存块分配掉,若在接下来 $600$ 秒内没有对这些内存块进行任何操作,这些内存块将在第 $601$ 秒时被系统释放掉; 对于接下来 $3$ 条访问内存的消息,$2$ 号和 $3$ 号内存块在占用,返回 `+`,同时它们的释放时间被推迟到第 $602$ 秒。$30000$ 号内存块未被占用,于是返回 `-`; 再接下来 $3$ 条访问内存的消息,由于在第 $601$ 秒时 $1$ 号内存块被释放,在第 $602$ 秒时 $2$ 号和 $3$ 号内存块被释放,所以依次返回 `-`、`+` 和 `-`,同时 $2$ 号内存块的释放时间被推迟到第 $1201$ 秒; 下面 $2$ 条申请内存的消息,由于目前 $1$ 号和 $3$ 号是空闲内存块,$2$ 号在被占用,所以系统分别将 $1$ 号和 $3$ 号内存块分配掉,并且 $1$ 号和 $3$ 号内存块的释放时间为第 $1202$ 秒。 最后一条访问内存的消息,由于 $2$ 号内存块已在第 $1201$ 秒时被释放掉,因此返回 `-`。 【数据范围】 对于 $20\%$ 的数据,消息数不大于 $500$; 对于 $100\%$ 的数据,消息数不大于 $1000$ ,每次申请内存操作时,至少会有一个内存块处于空闲状态$0\leq x < 86400$,保证数据合法。
序号 标题 作者 发表时间 费用 订购数 操作