题目描述
计算机的内存被分割成 $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$,保证数据合法。