Редакция для Сортировка по убыванию
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Автор:
1. Идея
Нужно вывести все данные числа в порядке невозрастания, то есть от большего к меньшему.
Самый прямой способ — считать все значения в массив, отсортировать его по убыванию и вывести результат.
2. Наблюдения
- В задаче не требуется ничего сложнее обычной сортировки.
- Числа могут быть:
- положительными,
- отрицательными,
- равными друг другу.
- Порядок невозрастания означает, что каждый следующий элемент не больше предыдущего.
- Ограничение
n <= 2 * 10^5хорошо подходит для стандартной сортировки, которая работает заO(n log n).
3. Алгоритм
- Считать число
n. - Считать массив из
nцелых чисел. - Отсортировать массив по убыванию.
- Вывести элементы массива через пробел.
4. Почему это работает
После сортировки по убыванию:
- самый большой элемент окажется на первом месте;
- второй по величине — на втором;
- и так далее;
- каждый следующий элемент будет не больше предыдущего.
Именно такой порядок и требуется по условию: от самого высокого к самому низкому, то есть в порядке невозрастания.
Значит, после применения стандартной сортировки по убыванию получаем корректный ответ.
5. Сложность
Сортировка n чисел занимает O(n log n).
Дополнительно используется O(n) памяти для хранения массива.
6. Код на C++17
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<long long> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end(), greater<long long>());
for (int i = 0; i < n; i++) {
if (i > 0) cout << ' ';
cout << a[i];
}
cout << '\n';
return 0;
}
7. Код на Python 3
n = int(input())
a = list(map(int, input().split()))
a.sort(reverse=True)
print(*a)
Комментарии