Mergesort mit Inversionszählung
TypeScript
Hard
sorting
Aufgabe «Mergesort mit Inversionszählung»
Gegeben ist ein Array von ganzen Zahlen. Es muss mit Hilfe von Mergesort aufsteigend sortiert werden, und zusätzlich die Anzahl der Inversionen im ursprünglichen Array gezählt werden. Eine Inversion ist ein Indexpaar (i, j), für das i < j und a[i] > a[j] gilt. Eingabedaten: Die erste Zeile enthält die Zahl n (1 ≤ n ≤ 10^5), die zweite Zeile enthält n ganze Zahlen, deren Betrag jeweils 10^9 nicht überschreitet. Ausgabedaten: Die erste Zeile ist die Anzahl der Inversionen, die zweite Zeile ist das sortierte Array, durch Leerzeichen getrennt.
Eingabeformat
Zuerst eine ganze Zahl n. Dann n ganze Zahlen, durch Leerzeichen getrennt.
Ausgabeformat
Zwei Zeilen: Die erste ist die Anzahl der Inversionen (ganze Zahl), die zweite ist das sortierte Array, durch Leerzeichen getrennt.
Beispiele
Beispiel 1
EINGABE
5
3 1 4 2 5
AUSGABE
3
1 2 3 4 5
Beispiel 2
EINGABE
4
4 3 2 1
AUSGABE
6
1 2 3 4
Beispiel 3
EINGABE
123
AUSGABE
0
Beispiel 4
EINGABE
0
AUSGABE
0
main.ts