#P1543. Memory Manager
Memory Manager
题目描述
第一个国家级操作系统 —— BerlOS 就要发布了。但是,它的一些功能还没有完善,比如内存管理系统。在开发者的计划里,第一版里的内存管理系统是简单并且是线性的。它将会支持以下操作:
alloc n
—— 在内存中分配 字节的空间。此命令将返回已分配的内存块的编号 。erase x
—— 释放编号为 的内存块。defragment
—— 碎片整理,将所有内存块全部向内存的起点靠拢并且不改变它们的顺序。
整条内存一共有 个字节,每个字节依次编号为 。
操作 有一个参数 ,表示需要分配 字节大小的内存块。在执行这个操作时,系统将把一块最靠近内存起点的,长度为 的连续空闲字节分配到一个内存块(这块内存块内的所有字节将被标记为已使用)。这个操作的返回值为这块内存块的编号。如果没有符合条件的内存块,返回 NULL
。
操作 有一个参数 ,表示需要释放的内存块的编号。它将释放这个内存块(这块内存块内的所有字节将被标记为空闲)。如果成功释放,不返回值;如果编号为 的内存块不存在,返回 ILLEGAL_ERASE_ARGUMENT
。
操作 没有任何参数。它只是将所有内存块向前依次(编号小的地方)挪动直到它们紧挨在一起,不改变它们的顺序。
你将用连续的正整数()作为每一个内存块的编号。比如,第 次分配的内存块编号为 。你的任务是依次输出所有 指令的返回值,以及所有执行失败的 指令的返回值。
输入格式
第一行包括两个正整数 和 。 表示操作次数, 表示内存大小(为 字节)。
接下来的 行为每一次的命令。
输出格式
依次为每次执行的 指令的返回值或执行失败的 erase 指令返回的 ILLEGAL_ERASE_ARGUMENT
。
6 10
alloc 5
alloc 3
erase 1
alloc 6
defragment
alloc 6
1
2
NULL
3