Колекція set з пошуком найближчих

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

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

Бали: 3,00 (partial)
Time limit: 0.5s
Java 1.0s
Memory limit: 1G
Input: input.txt
Output: output.txt

Problem type

Попередження.

Ця задача може досить легко розв'язуватися одними мовами програмування, і значно важче – іншими. Автору задачі твердо відомо, що її легко розв'язати мовою C++ з використанням STL-контейнера set чи мовою Java з використанням колекції TreeSet. Наскільки відомо автору задачі, її не можна легко розв'язати ні мовою Python, ні мовою C#, бо відповідні типи чи колекції (Python set, C# HashSet, C# SortedSet, ...) тупо не містять потрібних для цієї задачі методів, які є в C++ STL std::set та Java TreeSet. Звісно, ніщо не заважає написати повністю свій аналог цих класів своєю мовою програмування, але це істотно складніше, чим використати готові методи готового бібліотечного типу. Чи є інші, крім перелічених, мови програмування, де цю задачу все-таки можна розв'язати легко, автор задачі не знає.

Кінець попередження.

Напишіть програму, яка виконуватиме послідовність запитів виду ADD num, PRESENT num та COUNT (без параметра).

  • Виконання кожного запиту виду ADD num має додавати елемент num у множину (якщо такий елемент вже є, додавання ще однієї копії не змінює множину), на екран при цьому нічого не виводиться.

  • При виконанні кожного запиту виду PRESENT num значення множини не змінюється, а на екран повинно видаватися:

    • якщо число num наявне у множині (як елемент) – повідомлення YES (великими літерами, в окремому рядку);
    • якщо ж такого елемента у множині немає, то в окремому рядку має бути виведено спочатку слово NO (великими літерами), кома і один пробіл, а потім:
      • або слово EMPTY (великими літерами), яке позначає, що множина порожня,
      • або нерівність, яка показує найближчі елементи, що знаходяться у множині; якщо множина містить і менший, і більший елементи, нерівність має бути подвійною, а якщо елемент із поточного запиту менше мінімального або більше максимального – одинарною.
  • При виконанні кожного запиту виду COUNT має видаватися на екран в окремому рядку кількість різних елементів у множині; значення множини при цьому не змінюється.

Вхідні дані (текстовий файл!)

Вхідні дані задані в текстовому файлі input.txt. (Якщо нема досвіду роботи з файлами на сайтах з автоматичною перевіркою задач, спробуйте спочатку розв'язати задачу «A plus B — FILE(!) I/O».)

У першому рядку задано кількість запитів N (~1 < N < 500000~), далі йдуть N рядків, кожен з яких містить по одному запиту згідно з описаним форматом.

Значення чисел є цілими й належать діапазону знакового 32-бітового цілого типу.

Результати (текстовий файл!)

Результати слід вивести в текстовий файл output.txt.

Виводьте окремими рядками результати запитів PRESENT та COUNT; на запити ADD нічого не виводьте.

Зверніть увагу, що у випадку виведення символів < довкола них не можна ставити пробіли.

Приклади

Вхід

12
COUNT
PRESENT 3
ADD 2
ADD 5
PRESENT 3
PRESENT 1
PRESENT 17
COUNT
ADD 3
ADD 5
PRESENT 3
COUNT

Результат

0
NO, EMPTY
NO, 2<3<5
NO, 1<2
NO, 5<17
2
YES
3

Попередження.

Ця задача може досить легко розв'язуватися одними мовами програмування, і значно важче – іншими. Автору задачі твердо відомо, що її легко розв'язати мовою C++ з використанням STL-контейнера set чи мовою Java з використанням колекції TreeSet. Наскільки відомо автору задачі, її не можна легко розв'язати ні мовою Python, ні мовою C#, бо відповідні типи чи колекції (Python set, C# HashSet, C# SortedSet, ...) тупо не містять потрібних для цієї задачі методів, які є в C++ STL std::set та Java TreeSet. Звісно, ніщо не заважає написати повністю свій аналог цих класів своєю мовою програмування, але це істотно складніше, чим використати готові методи готового бібліотечного типу. Чи є інші, крім перелічених, мови програмування, де цю задачу все-таки можна розв'язати легко, автор задачі не знає.


Коментарі

Please read the guidelines before commenting.


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