Автор: | А. Баранов | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 8 Мб | |
Выходной файл: | output.txt |
Оперативная память компьютера может быть представлена в виде массива байт, где адрес каждого байта определяется его позицией относительно начала такого массива. В процессе своей работы различные программы могут запрашивать отдельные участки (блоки) памяти, которые должны выделяться и освобождаться по мере необходимости.
Требуется написать менеджер памяти, который хранит информацию о всех доступных блоках и отвечает за обработку запросов следующего вида.
Запрос на выделение памяти
Вначале выбирается свободный блок наименьшего размера, который может уместить запрашиваемый объем данных. Если таких блоков несколько, среди них выбирается блок с наименьшим адресом (смещением). При этом размещаемые в нем данные выравниваются по левому (нижнему) краю. В этом случае адрес свободного пространства сдвигается вверх (в сторону окончания блока).
В качестве ответа в выходной поток следует вывести адрес выделенного блока. В случае отказа от выделения памяти (если блок подходящего размера не был найден), в выходной поток выводится ' − 1'.
Запрос на удаление
Вначале выполняется поиск выделенного блока с заданным адресом.
Если такой блок был найден, он удаляется из таблицы (дополняя окружающее его свободное пространство), а в выходной поток выводится его размер. В противном случае, выводится ' − 2'.
В начале входного файла "input.txt" хранятся два натуральных числа: L — доступный объем памяти и n — общее число запросов. Далее следует ровно n строк, записанных в следующем формате:
new <размер_блока> — запрос на выделение;
del <адрес_блока> — запрос на удаление.
Выходной файл "output.txt" должен содержать результаты выполнения каждого такого запроса.
Полагается, что адресация памяти начинается с нуля.
0 < L ≤ 109, 0 < n ≤ 105
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|