Число инверсий
Время: 1 s · Память: 256 MB
- Сортировка
Условие
Дан массив из целых чисел. Его нужно отсортировать по возрастанию, меняя местами только соседние элементы. Какое наименьшее число обменов потребуется?
Формат ввода
В первой строке (). Во второй — целых чисел ().
Формат вывода
Одно число — наименьшее количество обменов.
Примеры
Ввод
3 3 1 2
Вывод
2
Ввод
5 9 1 0 5 4
Вывод
6
Примечание
Каждый обмен соседей устраняет ровно одну инверсию — пару с , поэтому ответ равен числу инверсий. Считайте их внутри сортировки слиянием: когда при слиянии двух отсортированных половин берётся элемент из правой половины, все оставшиеся элементы левой больше него — добавляем столько инверсий. Это ; симуляция пузырька — .
Равные элементы инверсий не образуют: при равенстве берите из левой половины. Ответ достигает — нужен 64-битный тип. Во втором примере ответ .
Источник: UVa 10810.
