N. Следующая перестановка
2000 мс · 256 МБ · всё или ничего
Дана перестановка чисел от 1 до . Выведите следующую за ней в лексикографическом порядке или сообщите, что она последняя.
Перебирать перестановки нельзя: при их немыслимо много, а ответ получается за один проход по массиву.
Приём такой: найти самый правый элемент, за которым идёт что-то большее; обменять его с наименьшим из больших справа; развернуть остаток. Именно это делает std::next_permutation, и полезно уметь написать это руками.
Формат ввода
Первая строка содержит число ().
Вторая строка содержит перестановку чисел от 1 до .
Формат вывода
Следующая перестановка через пробел или число , если данная перестановка последняя.
Примеры
ввод
3 1 2 3
вывод
1 3 2
ввод
3 3 2 1
вывод
-1
Войдите, чтобы отправлять решения.