Редакция для Сортировка по убыванию


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.

Автор: montes332

1. Идея

Нужно вывести все данные числа в порядке невозрастания, то есть от большего к меньшему.

Самый прямой способ — считать все значения в массив, отсортировать его по убыванию и вывести результат.


2. Наблюдения

  • В задаче не требуется ничего сложнее обычной сортировки.
  • Числа могут быть:
    • положительными,
    • отрицательными,
    • равными друг другу.
  • Порядок невозрастания означает, что каждый следующий элемент не больше предыдущего.
  • Ограничение n <= 2 * 10^5 хорошо подходит для стандартной сортировки, которая работает за O(n log n).

3. Алгоритм

  1. Считать число n.
  2. Считать массив из n целых чисел.
  3. Отсортировать массив по убыванию.
  4. Вывести элементы массива через пробел.

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)

Комментарии

Еще нет ни одного комментария.