内存分配

内存分配

背景

对于一个操作系统,内存分配是基础的功能之一。一般情况下,操作系统将可用的内存分类,所以才能够快速分配内存。

描述

给定内存大小(1~n),一开始内存全部可用,子进程按时间顺序向操作系统发送消息(software interrupt)。
消息包括:
Q len
 寻求一段len长度的连续 内存寻求后该内存空间被占用
 系统输出连续内存的起始位置,如有多段,输出地址最小的一个
 如果内存不足输出 -1
F l r
 释放区间为[l,r]的内存
 系统输出当前可用的内存
考虑到流氓软件,len可能小于等于0,l可能大于r,这时输出 "Ivalid Request" (英语不好,单独一行,不带引号)

格式

输入

第一行一个整数n,代表内存总长度
以下若干行,每行一个信息

输出

对于每一个指令,输出结果

样例

输入

1000
Q 123
Q 345
Q 234
F 233 445
F 1 999
Q 200
F 100 101
Q 10

输出

1
124
469
511
1000
1
802
201

限制

1s, 65536KiB
n<=5e5
操作不超过30000个

注意

如果内存已经是空闲的,释放内存操作无效。
部分空闲则忽略空闲的那一部分,仍然需要将其他部分释放。

来源

KEKE