#A. 操作系统

    传统题 1000ms 256MiB

操作系统

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

在操作系统中,内存分配管理是非常关键的问题。一台计算机的内存是有限的,当我们用计算机处理程序的时候,我们需要将程序和它所定义的数组等信息加载进内存中间。如果对内存的分配不当,那么我们将无法运行更多的程序。

为了简化这个问题,我们认为一台有nn Byte内存的计算机的内存空间是一个长度为nn的格子,编号为1,2,...,n1,2,...,n。在计算机处理程序的过程中,他会运行一些程序和释放一些程序。当计算机运行一个需要使用aia_i Byte空间的程序时,它会在空闲可使用的内存空间中寻找一段长度大于等于aia_i Byte的连续内存空间,将程序放入这段内存空间中。当计算机需要释放一个程序时,它会回收程序原先使用的内存空间到空闲可使用的内存空间段中。

例如,下图是在1515Byte的计算机中执行(运行33Byte的程序11,运行44Byte的程序22,运行55Byte的程序33,释放程序22,运行33Byte的程序44,运行44Byte的程序55)的示意图。

说明

观察上图,我们发现第6次操作,计算机仍然剩余44Byte空间,但是由于这44Byte的空间不是连续的,导致无法给程序55分配空间。于是我们想到一些优化的办法:

  • 我们没有规定寻找一段长度大于等于aia_iByte的内存空间找的是哪一段,如果我们找到的运行程序44的空间是后面那一段,那么我们就有空间运行程序55了。于是我们规定:每次给将要运行的程序寻找大于等于其所需内存空间的空闲内存空间段中,最小的那一条。如果最小的有多个,选择起始格子最靠左的那一个。将我们的程序分配到该空闲内存段中最靠左的一部分里。例如:当我们要给一个100100Byte的计算机执行(运行33Byte的程序)时,已经在运行的程序占据了13,812,1718,20211\sim 3,8\sim 12,17\sim 18,20\sim 21时,我们会选择474\sim 7这个空闲段,因为这一段在四个空闲内存段中大小是大于等于44的最小的一段,虽然474\sim 7131613\sim 16一样都是44Byte,但是474\sim 7更靠左,因此依据题意我们选择474\sim 7。接着我们将程序分入464\sim 6。这种方案在内存分配中叫做最优适配(Best Fit)。
  • 当采用上面一条规则没有找到可以使用的内存空间时,我们首先判断剩余的所有空闲内存段的空间和是否大于等于该程序所需的内存空间。若小于,则直接返回Fail,否则我们将所有已分配内存空间的程序所占内存空间向左靠拢。这样可以在最右边挤出一点空间。将程序分配到该空闲内存段中最靠左的一部分里;例如:当我们要给一个1212Byte的计算机执行(运行44Byte的程序)时,原先的程序已经占据13,56,891\sim 3,5\sim 6,8\sim 9,我们发现找不到一段大于等于44Byte的空闲空间,于是我们通过上述规则将已分配的程序内存空间左移,变为13,45,671\sim 3,4\sim 5,6\sim 7,此时右边挤出空闲空间8128\sim 12,我们将程序分配进8118\sim 11。这种方案在内存分配种叫做紧凑

现在,给你一台nn Byte的计算机以及qq次分配操作,请你依据最优适配紧凑的原则,对程序运行空间进行分配和释放。

输入描述

第一行两个正整数n,qn,q

接下来qq行,每行两个正整数x,yx,y。若x=1x=1,则表示一次分配操作,你需要将占用yy Byte内存空间的程序按题中所述原则分配进内存。若x=2x=2,则表示一次释放操作,你需要将第yy次分配操作对应的程序从内存中释放,输入保证第yy次分配操作为成功的分配操作,且在该操作前未被释放。

输出描述

输出共qq行。

对于每次分配操作,若分配成功,输出给程序分配的内存中,编号最靠左的格子编号。若分配失败,输出Fail

对于每次释放操作,输出被释放的程序释放前占用的最靠左的格子编号。

样例输入

30 15
1 10
1 10
1 10
2 2
1 8
1 3
2 1
1 3
1 8
2 7
1 9
2 6
2 4
2 3
2 8

样例输出

1
11
21
11
11
Fail
1
1
22
22
22
1
4
12
22

样例解释

说明

数据范围

测试点编号 n q 性质
1 1010
2 100100 AB
3 B
4
5 10001000 10001000 AB
6 B
7
8 10910^9 AB
9 B
10

性质A:没有内存释放操作。

性质B:保证每次采用最优适配均能成功。

2025/1/15 每日赏金题【Div. 1】

未认领
状态
已结束
题目
1
开始时间
2025-1-14 21:00
截止时间
2025-1-15 23:59
可延期
0 小时