\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}