Análise de permutações considerando inversões e quebras

Python Hard lists

Tarefa «Análise de permutações considerando inversões e quebras»

Dada uma permutação de números de 1 a n. É necessário determinar se ela é "quase idêntica": o número de inversões (pares i<j onde a[i] > a[j]) deve ser igual ao máximo possível para permutações com um número fixo de quebras. Quebra é uma posição k onde a[k] != k. Se a permutação satisfaz a condição, imprima o número de quebras, caso contrário imprima -1. Adicionalmente, se o número de quebras for igual a 0, imprima 0. Se a permutação for impossível (por exemplo, dados incorretos), imprima -2.

Formato de Entrada

Na primeira linha, um inteiro n (1 ≤ n ≤ 10^5). Na segunda linha, n inteiros — a permutação.

Formato de Saída

Um único inteiro: o número de quebras, -1 ou -2.

Exemplos

Exemplo 1

ENTRADA
abacaba abacaba
SAÍDA
7

Exemplo 2

ENTRADA
3 3 2 1
SAÍDA
-1
main.py