Ordenação por mesclagem com contagem de inversões

TypeScript Hard sorting

Tarefa «Ordenação por mesclagem com contagem de inversões»

Dado um array de números inteiros. É necessário ordená-lo em ordem crescente usando ordenação por mesclagem, e também contar o número de inversões no array original. Uma inversão é um par de índices (i, j) tal que i < j e a[i] > a[j]. Dados de entrada: a primeira linha contém o número n (1 ≤ n ≤ 10^5), a segunda linha contém n números inteiros, cada um em módulo não excedendo 10^9. Dados de saída: a primeira linha — o número de inversões, a segunda linha — o array ordenado separado por espaços.

Formato de Entrada

Primeiro um número inteiro n. Em seguida, n números inteiros separados por espaços.

Formato de Saída

Duas linhas: a primeira — o número de inversões (um número inteiro), a segunda — o array ordenado separado por espaços.

Exemplos

Exemplo 1

ENTRADA
5 3 1 4 2 5
SAÍDA
3 1 2 3 4 5

Exemplo 2

ENTRADA
4 4 3 2 1
SAÍDA
6 1 2 3 4

Exemplo 3

ENTRADA
123
SAÍDA
0

Exemplo 4

ENTRADA
0
SAÍDA
0
main.ts