Условие
Реализуйте класс Range с закрытыми целочисленными полями нижней и верхней границ. Начальный диапазон — [0, 100]. Геттеры int get_lower() const и int get_upper() const возвращают границы; метод bool contains(int value) const проверяет принадлежность включительному диапазону.
Метод bool set_lower(int value) изменяет нижнюю границу, только если она не больше текущей верхней. Метод bool set_upper(int value) изменяет верхнюю границу, только если она не меньше текущей нижней. Метод bool set_bounds(int lower, int upper) меняет обе границы одновременно при lower ≤ upper. При отказе любой сеттер возвращает false и сохраняет обе прежние границы. При успехе он возвращает true.
Обработайте команды: LOWER value, UPPER value, BOUNDS lower upper, CONTAINS value. Изменение диапазона выполняйте только через сеттеры.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.
Входные данные
В первой строке вводится Q. Следующие Q строк содержат команды указанного вида. Ограничения: 1 ≤ Q ≤ 1000, все числовые аргументы находятся в диапазоне от −10000 до 10000. Для BOUNDS правильный порядок границ не гарантируется.
Выходные данные
Для каждой команды изменения выведите OK или ERROR, затем текущие нижнюю и верхнюю границы через пробел. Для CONTAINS выведите только YES или NO.
Примеры
4 LOWER 10 UPPER 20 CONTAINS 15 CONTAINS 21
OK 10 100 OK 10 20 YES NO
4 LOWER 101 BOUNDS 8 3 UPPER -1 CONTAINS 0
ERROR 0 100 ERROR 0 100 ERROR 0 100 YES
3 BOUNDS -5 -5 CONTAINS -5 LOWER -4
OK -5 -5 YES ERROR -5 -5