\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amsthm,amssymb}
\usepackage{fullpage}
\usepackage{url}
\pagenumbering{gobble}
\usepackage{hyperref}
\usepackage{graphicx}
\input{statement/preamble.tex}
\title{ Tutorial: Inclusão de Subintervalos}
\author{}
\date{}
\begin{document}
\maketitle
Nesse problema, devemos ordenar os intervalos $(a_i, b_i)$:

\begin{itemize}
    \item Em ordem crescente de $a_i$.
    \item Em caso de empate, em ordem decrescente de $b_i$.
\end{itemize}

Em seguida, devemos iterar sobre os intervalos ordenados, mantendo o maior valor de $b_i$
visto até o momento. Se encontrarmos um intervalo $(a_i, b_i)$ tal que $b_i$ seja menor ou
igual ao maior valor de $b_i$ visto até o momento, então esse intervalo é coberto por um
intervalo anterior e podemos descartá-lo. Caso contrário, atualizamos o maior valor de
$b_i$ visto até o momento.

O algoritmo abaixo implementa essa lógica.

\begin{algoritmo}
\caption{\Call{interval-cover}{$I$}}
\KwIn{Lista de intervalos $I[0,n-1]$}
\KwOut{Lista de intervalos $I'$ não cobertos por nenhum outro intervalo}
$I' \gets \emptyset$\;
\Call{sort}{$I$} \tcp{Ordena os intervalos com critérios especificados}
$\max_b \gets -\infty$\;
\ForEach{$(a_i, b_i) \in I$}{
    \If{$b_i > \max_b$}{
        $I'.\Call{append}{(a_i,b_i)}$\;
        $\max_b \gets b_i$\;
    }
}
\Return{$I'$}\;
\end{algoritmo}


\section*{Análise}

O passo de ordenação tem complexidade $\Theta(n \lg n)$ e domina o custo do algoritmo.\end{document}
