2.2 Указатели и ссылки

2.2.5 Двойной переворот

Условие

Создайте массив, содержащий числа от 1 до N в порядке возрастания. Сначала расположите в обратном порядке элементы на позициях от A до B включительно, затем — элементы на позициях от C до D включительно. Второй переворот выполняется в массиве, уже изменённом первым переворотом. Участки могут пересекаться. В условии позиции нумеруются с единицы.

Реализуйте функцию void reverse_range(int array[], int left, int right), которая переворачивает участок исходного массива между включительными границами left и right. Параметры функции являются индексами с нуля. В функции main вызовите её дважды: сначала с границами A - 1 и B - 1, затем с границами C - 1 и D - 1.

Функция должна изменять переданный массив, не выполнять ввод или вывод и не создавать второй массив для хранения результата. Для обмена элементов можно использовать функцию swap_values из задачи 2.2.1. Использование готовых функций переворота, включая std::reverse, запрещено.

Ограничения

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

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

Пять целых чисел N, A, B, C, D в одной строке через пробел. Ограничения: 2 ≤ N ≤ 1000, 1 ≤ A < B ≤ N, 1 ≤ C < D ≤ N.

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

Выведите полученный массив из N целых чисел в одной строке через пробел.

Примеры

Вход 1
9 2 5 6 9
Ожидаемый выход
1 5 4 3 2 9 8 7 6
Вход 2
9 3 6 5 8
Ожидаемый выход
1 2 6 5 8 7 3 4 9
Вход 3
4 1 4 1 4
Ожидаемый выход
1 2 3 4

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

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

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

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

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

Все попытки

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

Редактор

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