8.4 Перегрузки, шаблоны и пространства имён

8.4.2 Шаблон диапазона

Условие

В пространстве имён control реализуйте шаблон класса Range<T>. Закрытые поля нижней и верхней границ имеют тип T и задаются конструктором Range(T lower, T upper). Предусмотрите методы T get_lower() const, T get_upper() const, bool contains(T value) const и T clamp(T value) const. Последний метод ограничивает значение включительным диапазоном.

Прочитайте границы и запросы, создайте объект control::Range<int> или control::Range<double> в зависимости от указанного типа. Для каждого значения определите принадлежность диапазону и результат ограничения. Реализуйте один шаблон; отдельные копии класса для int и double не допускаются.

Ограничения

Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.

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

В первой строке вводится слово INT или DOUBLE. Во второй строке — lower upper. В третьей строке — Q, в четвёртой — Q значений. Ограничения: 1 ≤ Q ≤ 1000, все числа находятся в диапазоне от −10000 до 10000, lower ≤ upper. Для INT числа целые; для DOUBLE — вещественные с не более чем двумя знаками после десятичной точки.

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

Выведите Q строк. Каждая содержит YES или NO — принадлежность исходного значения диапазону — и ограниченное значение через пробел. Для INT выводите целое число; для DOUBLE — число с шестью знаками после десятичной точки.

Примеры

Вход 1
INT
0 10
3
-1 5 11
Ожидаемый выход
NO 0
YES 5
NO 10
Вход 2
DOUBLE
0.5 1.5
3
0.5 1.25 2
Ожидаемый выход
YES 0.500000
YES 1.250000
NO 1.500000
Вход 3
INT
7 7
2
7 6
Ожидаемый выход
YES 7
NO 7

Пробный запуск

Код берётся из редактора. Запуск не создаёт посылку и не влияет на баллы.

Выберите пример или введите свои данные и нажмите «Запустить».

Текущая попытка

Отправьте решение. Этапы и результат появятся здесь автоматически.

Все попытки

Войдите, чтобы видеть свои попытки.

Редактор

Один файл до 64 КиБ · Tab / Shift+Tab — отступ · Esc — выход из редактора · черновик сохраняется для этого аккаунта, задачи и языка.