Escrito por Leonardo Paes.
Conhecimento prévio necessário:
Para resolvermos esse problema, podemos utilizar um vetor que guarda o índice do menor valor em um prefixo da permutação, e outro vetor que guarda o índice do menor valor em um sufixo da permutação. Tendo esses vetores calculados, basta fazermos um loop de até e checarmos se ambos o mínimo do prefixo e o mínimo do sufixo são menores que o valor atual.
Código de exemplo: