Ценные бумаги на фондовом рынке характеризуются множеством параметров. У них есть цена и ликвидность, также оценивать динамичность изменения цены, среднюю прибыльность, потенциал роста прибыльности и др. показатели. Аналитики трейдовой компании "WebMarket" ввели специальный показатель надежности ценной бумаги и научились эффективно его оценивать. Большое значение этого показателя соответствует малому риску покупки ценной бумаги. Но с ростом надежности обычно падает среднее оцениваемое значение прибыльности.
Для своих клиентов, играющих на рынке ценных бумаг, компания "WebMarket" решила открыть значения этого показателя и более того, автоматизировать покупку ценных бумаг с заданным порядковым номером по значению надежности. Аналитики проанализировали идею, и решили, что наличие такого функционала будет способствовать привлечению новых клиентов на рынок "WebMarket", повышению объемов сделок, а значит, и повышению прибылей "WebMarket". Важно также отметить, что торговля на базе этого показателя может позитивно сказаться на российском фондовом рынке и cделать его более здоровым. Алгоритмы оценки надежности уже написаны, средства выделены, необходимая реклама проведена. Осталось только написать сам код.
Ценные бумаги в базе данных имеют три атрибута:
- code — непустая строка латинских символов и цифр длины 30 или меньше
- id — целочисленный идентификатор (начиная с 0)
- reliability — целое число из диапазона [−231,231)
.
Каждой новой ЦБ выдается следующий по порядку id и значение её надёжности устанавливается в 0. Если ценная бумага отзывается с рынка, ее id для новых бумаг не используется.
База данных получает запросы, которые позволяют вводить новые ЦБ на рынок, получать текущую информацию о ЦБ, отзывать ЦБ с рынка, менять значение надежности у ЦБ и находить ЦБ, которая стоит на n-м месте, если упорядочить ЦБ по убыванию надежности, а при одинаковых значениях по возрастанию идентификатора.
При добавлении ЦБ с кодом, который раньше встречался, но соответствующая ЦБ была отозвана с рынка, ей назначается новый идентификатор.
Входные данные
Первая строка входа содержит число запросов N. (1≤N≤100000). Затем идут N строк, каждая из которых содержит один запрос. Запросы бывают 4 типов:
- ISSUE code: добавить новую ЦБ code в базу данных, или вывести информацию о ЦБ, если она уже есть в базе
- если ЦБ code существует, то вывести EXISTS id reliability
- если ЦБ code не существует, то вывести CREATED id 0
- DELETE code: удалить ЦБ code из базы
- если ЦБ code существует, то вывести OK id reliability
- если ЦБ code не существует, то вывести BAD REQUEST
- RELIABILITY code reliability: увеличить количество очков ЦБ, гарантируется, что значение останется в диапазоне [−231,231)
- если ЦБ code существует, то вывести OK id new_reliability
- если ЦБ code не существует, то вывести BAD REQUEST
- FIND n: найти n-ю ЦБ (начиная с 0)
- если база не пуста, найти ЦБ, которая имела бы порядковый номер n (нумерация начинается с 0), если все ЦБ упорядочить сначала по убыванию баллов, а группы ЦБ с одинаковыми баллами упорядочить по времени их добавления (то есть по возрастанию id); а если n больше, чем количество ЦБ в базе, то найти последнюю ЦБ в этом порядке; для обоих случаев вывести OK code id reliability
- если база пуста, то вывести EMPTY
Выходные данные
Таким образом, на каждый запрос на входе нужно вывести одну строку с результатом.
Примеры
№ | Входные данные | Выходные данные |
1
|
17 ISSUE aaa FIND 10 ISSUE bbb ISSUE ccc RELIABILITY aaa 10 RELIABILITY bbb 30 RELIABILITY ccc 20 RELIABILITY xxx 20 FIND 1 FIND 2 FIND 0 ISSUE eee ISSUE fff FIND 3 FIND 111 DELETE bbb FIND 0
|
CREATED 0 0
OK aaa 0 0
CREATED 1 0
CREATED 2 0
OK 0 10
OK 1 30
OK 2 20
BAD REQUEST
OK ccc 2 20
OK aaa 0 10
OK bbb 1 30
CREATED 3 0
CREATED 4 0
OK eee 3 0
OK fff 4 0
OK 1 30
OK ccc 2 20
|