Вставки, пошуки, індекси (наприклад, дерево)

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 8,00 (partial)
Time limit: 2.0s
C# 3.0s
PyPy 3 3.0s
Memory limit: 1G
Input: stdin
Output: stdout

Author:
Suggester:
Problem type

Нема жорсткої вимоги робити цю задачу саме з використанням бінарного дерева пошуку, що підтримує операцію «знайти за номером», але це – один зі способів. Гарантовано, що вхідні дані згенеровані суто випадково, тому небалансоване дерево не має істотних переваг над балансованим (процес балансування можна й не писати). Можна використати й деяку іншу структуру даних (взагалі не дерево, а зовсім іншу). Однак, просто масив, начебто, повинен виявлятися не досить ефективним.


Напишіть програму, яка реалізовуватиме деяку колекцію, яка підтримує дії «вставити» та «знайти» (за значенням). Програма повинна виконувати послідовність запитів вигляду

  • ADD v,
  • SEARCH v,
  • INDEX i,
  • VAL2INDEX v,
  • COUNT,

де vi – цілі числа.

Для кожного запиту «ADD v» слід виконати такі дії: якщо вказаного числа v ще нема в колекції, то вставити (додати) його, якщо вже є – залишити як було (не вставляти додаткову копію). При виконанні запитів ADD ніякого результату не виводиться, лише змінюється внутрішній стан колекції.

Для кожного запиту «SEARCH v» слід вивести на екран слово «YES» (якщо значення v знайдене) або слово «NO» (якщо не знайдене); при виконанні запитів SEARCH колекція не змінюється.

Для кожного запиту «INDEX i», слід вивести на екран значення, яке мало би вказаний порядковий номер i, якби колекція була відсортованим масивом з нумерацією з нуля. Інакше кажучи, таке значення з колекції, що рівно i інших значень колекції строго менші за знайдене. У випадку, якщо такого елемента не існує (значення i занадто велике або занадто мале), слід вивести слово «NO». В будь-якому разі, при виконанні запитів INDEX колекція не змінюється.

Для кожного запиту «VAL2INDEX n», якщо значення n є у колекції, то слід вивести, під яким індексом воно було б у колекції, якби колекція була відсортованим масивом з нумерацією з нуля. Інакше кажучи, якщо значення n є у колекції, то слід вивести, скільки інших елементів колекції строго менші вказаного n. У випадку, якщо колекція не містить такого значення, слід вивести слово «NO». В будь-якому разі, при виконанні запитів «VAL2INDEX» колекція не змінюється.

Для кожного запиту «COUNT», слід вивести поточну кількість елементів у колекції; колекція при цьому не змінюється.

Вхідні дані

В кожному рядку вхідних даних записаний один із запитів «ADD v», або «SEARCH v», або «INDEX i», або «VAL2INDEX v», або «COUNT» (без лапок; слова записані великими латинськими буквами; для всіх запитів, що передають число (всіх крім COUNT), число відділене від слова одинарним пробілом, і для запитів "INDEX" перебуває в межах від 0 до ~10^6~, а для решти запитів у межах від ~(-10^9)~ до ~+10^9~). Загальна кількість запитів не перевищує ~5\cdot10^5~ (пів мільйона). Гарантовано, що вхідні дані згенеровані суто випадково, тому небалансоване дерево не має істотних переваг над балансованим (процес балансування можна й не писати).

Результати

Для кожного запиту слід виводити відповідь на нього, в окремому рядку; якщо відповідь є словом, то великими латинськими буквами; в будь-якому разі, без лапок.

Приклади

Вхід

ADD 50
ADD -6
COUNT
ADD -2
ADD 57
INDEX 1
ADD -1
VAL2INDEX 50
ADD -2
ADD 29
ADD 19
INDEX 6
ADD 27
ADD 22
PRESENT -3
ADD -7
VAL2INDEX -7
VAL2INDEX 73
VAL2INDEX 22
PRESENT -7

Результат

2
-2
3
57
NO
0
NO
5
YES

Примітки

Детальніше пояснимо приклад:

2 – у відповідь на COUNT, коли колекція містить –6, 50

-2 – у відповідь на INDEX 1, коли колекція містить –6, –2, 50, 57.

3 – у відповідь на VAL2INDEX 50, коли колекція містить –6, –2, –1, 50, 57.

57 – у відповідь на INDEX 6, коли колекція містить –6, –2, –1, 19, 29, 50, 57 (причому, повторне включення –2 не змінило вміст колекції).

NO – у відповідь на PRESENT –3, коли колекція містить –6, –2, –1, 19, 22, 27, 29, 50, 57.

0 – у відповідь на VAL2INDEX -7, коли колекція містить –7, –6, –2, –1, 19, 22, 27, 29, 50, 57.

0 – у відповідь на VAL2INDEX 73, коли колекція містить –7, –6, –2, –1, 19, 22, 27, 29, 50, 57.

5 – у відповідь на VAL2INDEX 22, коли колекція містить –7, –6, –2, –1, 19, 22, 27, 29, 50, 57.

YES – у відповідь на PRESENT -7, коли колекція містить –7, –6, –2, –1, 19, 22, 27, 29, 50, 57.


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.