Темы --> Информатика --> Структуры данных --> Деревья --> Двоичное дерево поиска
---> 24 задач <---
Источники
    Личные олимпиады(938 задач)
    Командные олимпиады(684 задач)
Страница: << 1 2 3 4 5 >> Отображать по:

Для полученного дерева выведите список всех вершин, имеющих по два ребёнка, в порядке возрастания.

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

Вводится последовательность целых чисел, оканчивающаяся нулем. Сам ноль в последовательность не входит. Постройте по этой последовательности дерево.

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

Выведите ответ задачи.

Примеры
Входные данные
7 3 2 1 9 5 4 6 8 0
Выходные данные
3
5
7

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

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

Вводится последовательность целых чисел,оканчивающаяся нулем. Построить по ней дерево.

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

Выведите список требуемых вершин.

Примеры
Входные данные
7 3 2 1 9 5 4 6 8 0
Выходные данные
2
9

Дерево называется сбалансированным, если для любой его вершины высота левого и правого поддерева для этой вершины различаются не более чем на 1.

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

Вводится последовательность целых чисел, оканчивающаяся нулем. Сам ноль в последовательность не входит. Постройте дерево, соответствующее данной последовательности.

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

Определите, является ли дерево сбалансированным, выведите слово YES или NO.

Примеры
Входные данные
7 3 2 1 9 5 4 6 8 0
Выходные данные
YES

По данной последовательности постройте дерево, запоминая для каждого элемента его значение и количество его повторений в последовательности.

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

Вводится последовательность целых чисел, заканчивающаяся нулем. Сам ноль в последовательность не входит.

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

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

Примеры
Входные данные
7 3 2 1 9 5 4 6 8 0
Выходные данные
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1

Ценные бумаги на фондовом рынке характеризуются множеством параметров. У них есть цена и ликвидность, также оценивать динамичность изменения цены, среднюю прибыльность, потенциал роста прибыльности и др. показатели. Аналитики трейдовой компании "WebMarket" ввели специальный показатель надежности ценной бумаги и научились эффективно его оценивать. Большое значение этого показателя соответствует малому риску покупки ценной бумаги. Но с ростом надежности обычно падает среднее оцениваемое значение прибыльности.

Для своих клиентов, играющих на рынке ценных бумаг, компания "WebMarket" решила открыть значения этого показателя и более того, автоматизировать покупку ценных бумаг с заданным порядковым номером по значению надежности. Аналитики проанализировали идею, и решили, что наличие такого функционала будет способствовать привлечению новых клиентов на рынок "WebMarket", повышению объемов сделок, а значит, и повышению прибылей "WebMarket". Важно также отметить, что торговля на базе этого показателя может позитивно сказаться на российском фондовом рынке и cделать его более здоровым. Алгоритмы оценки надежности уже написаны, средства выделены, необходимая реклама проведена. Осталось только написать сам код.

Ценные бумаги в базе данных имеют три атрибута:

  • code — непустая строка латинских символов и цифр длины 30 или меньше
  • id — целочисленный идентификатор (начиная с 0)
  • reliability — целое число из диапазона \([-2^{31}, 2^{31})\).

Каждой новой ЦБ выдается следующий по порядку id и значение её надёжности устанавливается в 0. Если ценная бумага отзывается с рынка, ее id для новых бумаг не используется.

База данных получает запросы, которые позволяют вводить новые ЦБ на рынок, получать текущую информацию о ЦБ, отзывать ЦБ с рынка, менять значение надежности у ЦБ и находить ЦБ, которая стоит на n-м месте, если упорядочить ЦБ по убыванию надежности, а при одинаковых значениях по возрастанию идентификатора.

При добавлении ЦБ с кодом, который раньше встречался, но соответствующая ЦБ была отозвана с рынка, ей назначается новый идентификатор.

Входные данные
Первая строка входа содержит число запросов \(N\). (\(1 \le N \le 100\,000\)). Затем идут \(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: увеличить количество очков ЦБ, гарантируется, что значение останется в диапазоне \([-2^{31}, 2^{31})\).
    • если ЦБ code существует, то вывести OK id new_reliability
    • если ЦБ code не существует, то вывести BAD REQUEST
  • FIND n: найти n-ю ЦБ (начиная с 0)
    • если база не пуста, найти ЦБ, которая имела бы порядковый номер n (нумерация начинается с 0), если все ЦБ упорядочить сначала по убыванию баллов, а группы ЦБ с одинаковыми баллами упорядочить по времени их добавления (то есть по возрастанию id); а если n больше, чем количество ЦБ в базе, то найти последнюю ЦБ в этом порядке; для обоих случаев вывести OK code id reliability
    • если база пуста, то вывести EMPTY

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

Таким образом, на каждый запрос на входе нужно вывести одну строку с результатом.

Примеры
Входные данные
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

Страница: << 1 2 3 4 5 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест