Почему мне надо делать так много домашних заданий???
У Джейми очень много дел в школе. Он начинает забывать, какие домашние задания ему надо сделать, поэтому он решил записывать их в список дел. Каждому заданию он присваивает некоторый приоритет так, что чем приоритет меньше, тем важнее задание. Таким образом он сможет решить, на какие задания тратить больше времени.
Через несколько дней Джейми обнаружил, что его список дел настолько большой, что он не может им пользоваться самостоятельно. Так как вы дружите с Джейми, помогите ему и напишите программу, которая выполняет следующий операции со списком дел:
- set ai xi — Добавить задание ai в список дел, если оно ещё не в списке, и назначить ему приоритет равный xi. Если задание ai уже в списке дел, его приоритет станет равен xi.
- remove ai — Удалить задание ai из списка дел, если оно в нём есть.
- query ai — Выведите количество заданий, которые важнее (имеют меньший приоритет), чем задание ai, чтобы Джейми смог лучше распределить своё время. Выведите - 1 если задания ai в списке дел нет.
- undo di — Отменить все изменения, сделанные за последние di дней (не включая день текущей операции)
В день с номером 0 список дел пуст. В каждый из следующих q дней Джейми будет делать ровно одну операцию одного из четырёх типов. Если операция — это query, то необходимо вывести ответ на запрос до начала обработки запроса, соответствующего следующему дню, чтобы Джейми смог заранее спланировать свой день.
Выходные данные
Для каждого запроса типа query, выведите одно целое число — количество заданий, которые имеют приоритет меньше, чем ai, или - 1, если задания ai нет в списке дел.
Протокол взаимодействия
Если операцимя имеет тип query, вам необходимо вывести ответ на запрос и сбросить буфер вывода до начала обработки следующей операции. В противном случае Вы можете получить вердикт Idleness Limit Exceed.
Для того, чтобы узнать, как сбросить буфер вывода, обратитесь к документации по Вашему языку программирования. Ниже приведён код для некоторых популярных языков программирования:
- C: fflush(stdout);
- C++: cout « flush;
- Java: System.out.flush();
Примеры
| № | Входные данные | Выходные данные |
|
1
|
8 set chemlabreport 1 set physicsexercise 2 set chinesemockexam 3 query physicsexercise query chinesemockexam remove physicsexercise query physicsexercise query chinesemockexam
|
1
2
-1
1
|
|
2
|
8 set physicsexercise 2 set chinesemockexam 3 set physicsexercise 1 query physicsexercise query chinesemockexam undo 4 query physicsexercise query chinesemockexam
|
0
1
0
-1
|
|
3
|
5 query economicsessay remove economicsessay query economicsessay undo 2 query economicsessay
|
-1
-1
-1
|
|
4
|
5 set economicsessay 1 remove economicsessay undo 1 undo 1 query economicsessay
|
-1
|