#1243. 3.内存管理

3.内存管理

当前没有测试数据。

3.内存管理

题目描述

计算机的内存被分割成3000030000个相同大小的内存块,这些内存块被依次编号为112233\ldots299982999829999299993000030000。申请或访问的内存块编号必须是整数。

当某申请或访问内存时,该会向系统发送一条消息:

  • x+x+表示在第xx秒向系统发送一条申请内存的消息;
  • x.yx.y表示在第xx秒向系统发送一条访问第yy块内存的消息。

程序开始时,所有内存块均处于空闲状态。

对于申请内存的消息,系统会将编号最小的空闲内存块中分配掉,该内存块转变为被占用状态。对于访问内存的消息,若当前内存块处于被占用状态,则系统会反馈一个++,否则反馈一个-。对于任何被占用的内存块,若在600600秒内无任何操作,则该内存块将重新变为空闲状态。

内存管理系统是十分复杂的,我们要求你编写一个程序,来模拟内存管理操作。

输入格式

输入文件包含若干行,每行描述一条消息,消息共有两种:

  • x+x+
  • x.yx.y

保证xx按照非递减顺序出现,对于在同一时刻发出的消息,按照输入顺序处理。

输出格式

对于每条申请内存的消息,输出系统分配掉的内存块编号。

对于每条访问内存的消息,输出++-表示该内存块是否被占用。

数据范围与提示

  • 对于20%20\%的数据,消息数不大于500500
  • 对于100%100\%的数据,消息数不大于10510^{5},每次申请内存操作时,至少会有一个内存块处于空闲状态,0x<864000 \leq x < 86400,保证数据合法。

样例

1 +
1 +
1 +
2 . 2
2 . 3
3 . 30000
601 . 1
601 . 2
602 . 3
602 +
602 +
1202 . 2
1
2
3
+
+
-
-
+
-
1
3
-

说明

对于前33条申请内存的消息,系统依次将112233号内存块分配掉,若在接下来600600秒内没有对这些内存块进行任何操作,这些内存块将在第601601秒时被系统释放掉;

对于接下来33条访问内存的消息,22号和33号内存块在占用,返回++,同时它们的释放时间被推迟到第602602秒。3000030000号内存块未被占用,于是返回-

再接下来33条访问内存的消息,由于在第601601秒时11号内存块被释放,在第602602秒时22号和33号内存块被释放,所以依次返回-++-,同时22号内存块的释放时间被推迟到第12011201秒;

下面22条申请内存的消息,由于目前11号和33号是空闲内存块,22号在被占用,所以系统分别将11号和33号内存块分配掉,并且11号和33号内存块的释放时间为第12021202秒。

最后一条访问内存的消息,由于22号内存块已在第12011201秒时被释放掉,因此返回-