Escrito por Caique Paiva
Conhecimentos Prévios Necessários
Suponha que a nossa sequência de bombons tem uma divisão boa
, com
, então, veja que
também é uma solução válida, pois, como o MEX de
é igual o de
, então
, também terá o mesmo MEX, pois esse intervalo vai conter todos os números de
até
e não vai conter
. Portanto, provamos que, caso tenhamos uma divisão boa de tamanho
, também temos uma divisão boa de tamanho
. Em particular, fazendo essa operação de juntar várias vezes, conseguimos chegar em somente
intervalos.
Agora, só precisamos ir atrás de intervalos
tal que o MEX deles dois sejam o mesmo. Então, chame de
um vetor de
elementos, onde
de
até
. Vamos ver como calcular ele.
Primeiro, seja um vetor que vai guardar quais elementos estão na nossa sequência (Ou seja,
caso
esteja na sequência, e
caso contrário). Inicialize
e
para todo i. Então, façamos um for com
indo até
, e no passo
, vamos calcular
:
- Primeiro, veja que
de
até
, então, para calcularmos
, basta adicionarmos
ao
de i-1. Então, faça
, e veja os seguintes casos:
- Se
, significa que
não foi adicionado ao vetor, então o mex de
até
continua sendo
, logo,
- Caso contrário, então todos os elementos de
até
estão em
até
, faça
, e faça o seguinte while:
- while(v[pref[i]] > 0) pref[i]++;
- Ou seja, enquanto
pertencer a
até
, aumente
. Isso vai achar qual é o mex de
até
.
- Se
Portanto, conseguimos calcular para todo
em
! Para finalizar, chame de
um vetor de
elementos onde
de
até
(Ele vai ser calculado quase da mesma maneira que pref). Então basta procurar algum
tal que
. Caso ele exista, imprima os inervalos
e
como resposta. Caso não exista, imprima -1. Complexidade final:
.