03. Редактор плейлиста

☰ Теория

Динамический массив List<T>

Что хранит. Последовательность элементов одного типа, которая может расти и уменьшаться. Сохраняет порядок и повторы.

Для чего используют. Подходит для плейлиста, заказа и списка результатов, когда элементы добавляются или удаляются во время работы.

Основные операции

Запись на C#Назначение
a.CountЧисло элементов; Capacity — отдельно выделенный запас места.
a[i]Прочитать или заменить элемент: 0 ≤ i < Count.
a.Add(x)Добавить в конец.
a.Insert(i, x)Вставить на позицию i: 0 ≤ i ≤ Count.
a.RemoveAt(i)Удалить по индексу; следующие элементы сдвинутся.
a.Remove(x)Удалить первое совпадение по значению; false, если его нет.
a.IndexOf(x)Индекс первого совпадения или −1.
a.Sort()Упорядочить элементы по возрастанию.

Пример

Для примера нужны using System; и using System.Collections.Generic;. Код выполняется внутри Main.

List<int> a = new List<int>();
a.Add(10);
a.Add(30);
a.Insert(1, 20);               // Теперь: 10, 20, 30.
a.Remove(10);                  // Теперь: 20, 30.
Console.WriteLine(a[0]);
Console.WriteLine(a.Count);

Вывод:

20
2

Важно. При вставке допустим индекс Count, при чтении, замене и удалении — нет. Во время foreach не добавляйте и не удаляйте элементы того же списка.

Для этой задачи

  • Неверный индекс. Сначала проверьте границы. При ошибке не выполняйте изменение списка.

Реализуйте редактор плейлиста. Изначально он пуст. Треки представлены целыми идентификаторами, которые могут повторяться. Индексы начинаются с нуля. Каждая команда выдаёт ровно одну строку ответа.

Команды

КомандаДействие и ответ
ADD xДобавить x в конец. Ответ OK.
INSERT i xВставить x на индекс i. При 0 ≤ i ≤ текущего размера ответ OK, иначе ERROR.
SET i xЗаменить значение по существующему индексу i. Ответ OK или ERROR.
REMOVE iУдалить элемент по существующему индексу i. Ответ OK или ERROR.
GET iВывести значение по существующему индексу i, иначе ERROR.
FIND xВывести индекс первого x; если x отсутствует, вывести −1.
COUNTВывести число треков.
PRINTВывести весь плейлист по порядку или EMPTY.

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

Первая строка содержит q. Далее записаны q команд, по одной в строке.

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

Для каждой команды выведите ответ из таблицы. Ошибочная команда не меняет плейлист. В PRINT значения разделяются одним пробелом.

Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.

Ограничения

1 ≤ q ≤ 5000; значения x и индексы i — целые числа от −10⁹ до 10⁹. Суммарное количество идентификаторов во всех ответах PRINT не превышает 200000.

Примеры
Входные данныеВыходные данные
1
12
ADD 40
ADD 40
INSERT 1 9
FIND 40
GET 1
SET 2 7
REMOVE 0
PRINT
COUNT
GET 2
FIND 40
PRINT
OK
OK
OK
0
9
OK
OK
9 7
2
ERROR
-1
9 7
2
8
PRINT
INSERT 0 5
INSERT 2 9
SET -1 3
REMOVE 0
GET 0
FIND 5
COUNT
EMPTY
OK
ERROR
ERROR
OK
ERROR
-1
0

Напишите программу
Auto
       

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам