Pilhas, Filas, Heaps e Contêineres Associativos: o Estado que Sobrevive à Pergunta Seguinte
por Frank de Alcantara em 01/10/2026
- 1. Contar Antes de Programar: Complexidade, Restrições e Medição
- 2. A Máquina por Baixo do Algoritmo: Tipos, Cache e Desvios
- 3. Treino T01: Contando Antes de Codificar
- 4. Caixa de Ferramentas I: Tipos, Números e Trabalho em Tempo de Compilação
- 5. Caixa de Ferramentas II: Vetores, Matrizes, Vistas e Algoritmos
- 6. Treino T02: Pagar Uma Vez, Perguntar Sempre
- 7. Entrada e Saída de Alto Desempenho
- 8. Treino T03: Alimentando a Máquina
- 9. Busca Binária: Comprar Informação pela Metade
- 10. Ordenar por Comparação: o Limite, a Biblioteca e a Seleção
- 11. Ordenar sem Comparar: Contagem, Radix e a Escolha da Ferramenta
- 12. Treino T04: Comprar Informação
- 13. Somas de Prefixo e Arrays de Diferenças: Integrar e Derivar em Tempo Constante
- 14. Janelas que Deslizam: Deque Monotônico, Dois Ponteiros, Kadane e Sparse Table
- 15. Bits como Conjuntos: Máscaras, popcount e Bitsets de Muitas Palavras
- 16. Hash de Prefixo, Seleção em Três Partes e o Algoritmo de Mo
- 17. Treino T05: Intervalos com Orçamento
- 18. Pilhas, Filas, Heaps e Contêineres Associativos: o Estado que Sobrevive à Pergunta Seguinte
O Artigo 17 fechou o capítulo dos arrays com um treino em que nada mudava depois de lido: os canais eram dragados no fim, as profundidades do rio estavam registradas para sempre, e os pedidos do banco de sementes chegavam todos de uma vez. Este artigo abre o capítulo das estruturas de dados, que trata do mundo em que os valores mudam enquanto as perguntas chegam. O livro define uma estrutura de dados como um acordo entre as atualizações e as perguntas: ela guarda informação suficiente para não recomeçar do zero, mas não tanta que cada atualização vire uma tragédia.
Com
| Estrutura | Operações principais | Custo típico |
|---|---|---|
| pilha ou deque monotônico | próximo maior, mínimo de janela |
|
std::set, std::map
|
busca e atualização com ordem | |
std::priority_queue |
extrair o melhor candidato |
|
| árvore de Fenwick | atualização pontual, soma de prefixo | |
| segment tree | atualização e consulta de intervalo | |
| hash table | pertinência, frequência |
|
| conjuntos disjuntos | uniões e conectividade |
|
Tabela 1: As estruturas do capítulo e os seus custos.
Este artigo trata das quatro primeiras famílias que não dependem de árvores especiais: pilhas e filas, árvores ordenadas, heaps e hash tables (tabelas indexadas por uma função de hash). A árvore de Fenwick e a segment tree (árvore que guarda resumos de intervalos) ficam para o Artigo 19, e os conjuntos disjuntos, para o Artigo 20.
As medições foram feitas com o MSVC do Visual Studio 18.10.3, com /std:c++latest /O2, em um Intel Core i7-10750H. Cada tempo é a mediana de cinco execuções depois de uma de aquecimento, salvo onde o texto disser outra coisa. Os programas deste artigo, com as entradas e as saídas esperadas de cada caso de teste, estão em serie-blog/competitiva-18.
Este artigo completo contém estratégias práticas e dados exclusivos reservados para nossos membros cadastrados.
Continuar com Google Acesso gratuito e instantâneo com sua conta Google(Updated: )