Problema D - Auxílio Informático

Se é a primeira vez que participas, consulta a página de instruções para informações detalhadas sobre o formato deste problema.

A Cláudia é uma das principais organizadoras das Olimpíadas Nacionais de Informática. Como parte da organização da prova de qualificação das olimpíadas, a Cláudia tem N tarefas a efetuar. Cada tarefa tem um horário que é um intervalo de tempo, ou seja, a i-ésima tarefa tem de ser desempenhada entre as ai e as bi horas. A Cláudia só consegue realizar uma tarefa de cada vez, por isso se duas tarefas se sobrepuserem ela só consegue fazer uma de cada vez.

Parte I

A Claúdia sabe que é possível que não consiga terminar todas as tarefas visto que pode haver sobreposições, mas ela quer efetuar o máximo número de tarefas possível. Determina o máximo número de tarefas que a Cláudia consegue desempenhar.

Exemplo

Se N = 5 e tivermos o seguinte horário de tarefas:

Que é pode ser visualizado da seguinte forma:

A tarefa 2 sobrepõe-se às tarefas 3 e 4, mas as restantes tarefas não têm sobreposições. Por isso a Cláudia pode efetuar as tarefas 1, 3, 4 e 5, para um total de 4 tarefas. A figura seguinte ilustra esta solução:

Restrições:

São garantidos os seguintes limites em todos os casos de teste desta parte que irão ser colocados ao programa:

1 ≤ N ≤ 100 000 Número de tarefas
1 ≤ ai < bi ≤ 1 000 000 Horários das tarefas

Os casos de teste desta parte do problema estão organizados em dois grupos:

Grupo Número de Pontos Restrições adicionais
1 25 N ≤ 1 000
2 25
-

Parte II

Para a ajudar a completar todas as tarefas, a Cláudia usou os seus conhecimentos informáticos para construir um robot que consegue efetuar qualquer uma das tarefas. Assim como a Cláudia, o robot só consegue fazer uma de cada vez.

A qualquer altura a Cláudia pode ativar o robot e quando não o quiser utilizar mais pode desligá-lo (não podendo voltar a ligá-lo novamente). Como o robot tem bateria limitada, a Cláudia quer determinar a duração do intervalo de tempo mais curto em que o robot tem de estar ligado para que ele e a Cláudia consigam terminar todas as tarefas ou determinar que não é possível os dois efetuarem todas as tarefas. Caso não seja possível efetuar todas as tarefas o output do teu programa deve ser -1.

Exemplo

Se N = 5 e tivermos o seguinte horário de tarefas:

Que é pode ser visualizado da seguinte forma:

A tarefa 2 sobrepõe-se às tarefas 3 e 4, mas as restantes tarefas não têm sobreposições. Por isso a Cláudia pode efetuar as tarefas 1, 2 e 5 e deixar o robot efetuar as tarefas 3 e 4. Para isso o robot só precisa de estar ligado entre as 5 e as 8 horas, para um total de 3 horas. A figura seguinte ilustra esta solução:

Restrições:

São garantidos os seguintes limites em todos os casos de teste desta parte que irão ser colocados ao programa:

1 ≤ N ≤ 100 000 Número de tarefas
1 ≤ ai < bi ≤ 1 000 000 Horários das tarefas

Os casos de teste desta parte do problema estão organizados em dois grupos:

Grupo Número de Pontos Restrições adicionais
3 25 N ≤ 100
4 25
-

Sumário de subtarefas

Os casos de teste do problema estão organizados em 4 grupos com restrições adicionais diferentes:

Grupo Número de Pontos Parte Restrições adicionais
1 25 Parte I N ≤ 1 000
2 25 Parte I
-
3 25 Parte II N ≤ 100
4 25 Parte II
-

Input

A primeira linha contém um inteiro P, que representa a parte que o caso de teste representa. Se for 1, então o caso de teste refere-se à Parte I, se for 2 então refere-se à Parte II.

Segue-se uma linha com um inteiro N, representando o número de tarefas.

Seguem-se N linhas, cada uma contendo dois inteiros separados por espaços, a i-ésima contendo ai e bi, representando o intervalo de tempo para a i-ésima tarefa.

Output

Parte I

O output deve conter uma linha contendo o número máximo de tarefas que a Cláudia consegue efetuar.

Parte II

O output deve conter uma linha contendo o a duração do intervalo de tempo mais curto em que o robot tem de estar ligado para que ele e a Cláudia consigam terminar todas as tarefas ou determinar que não é possível os dois efetuarem todas as tarefas. Caso não seja possível efetuar todas as tarefas o output do teu programa deve ser -1.

Input do Exemplo 1

1
5
2 5
5 10
5 6
7 8
10 12

Output do Exemplo 1

4

Explicação do Exemplo 1

Este exemplo corresponde ao exemplo mencionado no enunciado da Parte I.

Input do Exemplo 2

2
5
2 5
5 10
5 6
7 8
10 12

Output do Exemplo 2

3

Explicação do Exemplo 2

Este exemplo corresponde ao exemplo mencionado no enunciado da Parte II.


Qualificação para a final das ONI'2022
(22/04 a 24/04 de 2022)