\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amsthm,amssymb}
\usepackage{fullpage}
\usepackage{url}
\pagenumbering{gobble}
\usepackage{hyperref}

\title{ Tutorial: Inclusão de Subintervalos}
\author{}
\date{}
\begin{document}
\maketitle
\subsection*{Entendimento do Problema}
O problema pede o menor número de intervalos necessários para que todos os outros estejam contidos em pelo menos um dos selecionados. Um intervalo $[l, r]$ cobre $[l', r']$ se, e somente se, $l \le l'$ e $r \ge r'$. Isso significa que intervalos menores ou "internos" são redundantes se houver um intervalo maior que os englobe completamente.

\subsection*{Estratégia Ótima}
A solução consiste em identificar os intervalos "maximais", ou seja, aqueles que não são cobertos por nenhum outro intervalo do conjunto. Se um intervalo não é coberto por ninguém, ele obrigatoriamente deve fazer parte de $S'$. Se ele é coberto por alguém, ele pode ser descartado.

\subsection*{Algoritmo Passo a Passo}
\begin{enumerate}
    \item \textbf{Ordenação Especial:} Ordene os intervalos $S$ seguindo dois critérios:
    \begin{itemize}
        \item Primeiro, pelo ponto de início $l_i$ em ordem crescente.
        \item Em caso de empate no início ($l_i = l_j$), ordene pelo ponto de fim $r_i$ em ordem \textbf{decrescente}.
    \end{itemize}
    \item \textbf{Processamento Linear:} Após a ordenação, o primeiro intervalo da lista sempre será um candidato a $S'$ (pois tem o menor $l$).
    \item \textbf{Filtragem:} Mantenha uma variável \texttt{max\_r} para rastrear o maior ponto de fim encontrado até agora entre os intervalos que decidimos manter.
    \begin{itemize}
        \item Para cada intervalo $[l_i, r_i]$ na lista ordenada:
        \item Se $r_i > \texttt{max\_r}$, significa que este intervalo não é coberto por nenhum dos anteriores (pois, embora seu $l_i$ seja maior ou igual, seu $r_i$ estende a cobertura atual). Contabilizamos ele e atualizamos \texttt{max\_r}.
        \item Se $r_i \le \texttt{max\_r}$, este intervalo já está totalmente contido em algum intervalo anterior (que tinha $l \le l_i$ e $r \ge r_i$). Portanto, ele é descartado.
    \end{itemize}
\end{enumerate}



\subsection*{Exemplo de Execução}
Conjunto: $\{[2, 4], [3, 7], [1, 8], [4, 8]\}$
\begin{enumerate}
    \item \textbf{Após Ordenar:} $[1, 8], [2, 4], [3, 7], [4, 8]$.
    \item \textbf{Passo 1:} Pega $[1, 8]$. \texttt{max\_r} = 8. (Total = 1).
    \item \textbf{Passo 2:} $[2, 4]$. Como $4 \le 8$, é redundante.
    \item \textbf{Passo 3:} $[3, 7]$. Como $7 \le 8$, é redundante.
    \item \textbf{Passo 4:} $[4, 8]$. Como $8 \le 8$, é redundante.
    \item \textbf{Resultado:} 1.
\end{enumerate}

\subsection*{Complexidade}
\begin{itemize}
    \item \textbf{Tempo:} $O(N \log N)$ devido à ordenação inicial. A varredura subsequente é $O(N)$.
\end{itemize}\end{document}
