8.7 Стандартные контейнеры

8.7.1 Изменяемый список

Условие

Храните список целых чисел в std::vector<int>. Исходно список пуст. Обработайте команды PUSH value, INSERT index value, ERASE index, GET index, SIZE. INSERT вставляет перед элементом с указанным индексом; индекс, равный текущему размеру, означает добавление в конец. ERASE удаляет элемент; GET читает его. Индексация начинается с нуля.

Для INSERT допустимы индексы от 0 до размера включительно, для ERASE и GET — от 0 до размера минус один. При недопустимом индексе выведите ERROR и сохраните список. Все изменения выполняйте средствами std::vector.

Ограничения

Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.

Входные данные

В первой строке вводится Q. Следующие Q строк содержат команды. Ограничения: 1 ≤ Q ≤ 10000, −1 ≤ index ≤ 10000, −10⁶ ≤ value ≤ 10⁶.

Выходные данные

Для успешных PUSH, INSERT, ERASE выведите OK. Для GET — значение, для SIZE — текущий размер. При ошибке индекса выведите ERROR. Ответ на каждую команду — отдельная строка. После всех ответов выведите итоговый список в одной строке через пробел; для пустого списка выведите пустую строку.

Примеры

Вход 1
6
PUSH 10
PUSH 30
INSERT 1 20
GET 1
ERASE 0
SIZE
Ожидаемый выход
OK
OK
OK
20
OK
2
20 30
Вход 2
4
GET 0
INSERT -1 5
ERASE 0
SIZE
Ожидаемый выход
ERROR
ERROR
ERROR
0

Вход 3
5
INSERT 0 7
INSERT 1 9
INSERT 3 11
ERASE 1
GET 0
Ожидаемый выход
OK
OK
ERROR
OK
7
7

Пробный запуск

Код берётся из редактора. Запуск не создаёт посылку и не влияет на баллы.

Выберите пример или введите свои данные и нажмите «Запустить».

Текущая попытка

Отправьте решение. Этапы и результат появятся здесь автоматически.

Все попытки

Войдите, чтобы видеть свои попытки.

Редактор

Один файл до 64 КиБ · Tab / Shift+Tab — отступ · Esc — выход из редактора · черновик сохраняется для этого аккаунта, задачи и языка.