Pular para o conteúdo principal
ProdutosFerramentas de desktopTASTECADVisualização de desenhosTASTEFILESGerenciamento de arquivosTASTEFTPTransferência de arquivosTASTESSHEspaço de trabalho remotoTASTEZIPCompactação e extraçãoFerramentas para desenvolvedoresTASTECODEAmbiente de desenvolvimento integrado para RustTASTESTUDIOAmbiente integrado de desenvolvimento e testesTASTEETLIntegração de dados (ETL)ServidoresTASTEREMOTEServidor de área de trabalho remotaTASTEGEOServidor geoespacialTASTEMAILEspaço de trabalho de e-mailComeçarDownloadsDocumentaçãoComprarTodos os produtos
Marketplace
Notícias
TecnologiaNotíciasNotícias de desenvolvimento de hojeDocumentaçãoLinguagens de programaçãoRustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDartFrameworks de front-end webNext.jsReactVue.js · NuxtSvelteKitAngularFrameworks de servidorSpring BootDjangoFastAPIASP.NET CoreNestJS · ExpressFrameworks de apps e desktopTauriFlutterReact NativeElectronAlgoritmosFundamentos de algoritmosAlgoritmos essenciaisAlgoritmos avançadosAlgoritmos práticos
ComunidadeProjetosRegistros de desenvolvimentoPromptsProblemas de ferramentas de IAVitrineGuia da comunidade
ColaboreTransferência técnicaConstrução de siteConstrução de app de desktopPipeline de lançamento e pagamentoParceiro de vendasContato
ServiçosÁrea de trabalho remotaPacotes de instalação sob medida
TASTEDEV
Produtos

Ferramentas de desktop

TASTECADDesenhos complexos, abertos com levezaTASTEFILESSó os arquivos de que você precisa, o mais rápido possívelTASTEFTPO caminho mais organizado para seus arquivosTASTESSHEntre você e o servidor, uma conexão mais sólidaTASTEZIPCompacte mais rápido, extraia com mais segurança

Ferramentas para desenvolvedores

TASTECODEEdite, compile, depure e teste apps Rust em uma única janelaTASTESTUDIODa edição aos testes remotos e às correções com IA aprovadasTASTEETLMova dados de olho nos valores

Servidores

TASTEREMOTEUma área de trabalho remota rodando no seu próprio servidorTASTEGEOUm servidor geoespacial compatível com o GeoServer, reconstruído em RustTASTEMAILRetome o controle do seu e-mail

Começar

DownloadsVersões mais recentes de cada produtoDocsComo usar cada produtoComprarAssinaturas e licenças perpétuasTodos os produtosTodos os produtos de relance
Todos os produtos
MarketplaceNotícias
Tecnologia

Notícias

Notícias de desenvolvimento de hojeAnúncios oficiais de linguagens, frameworks, GitHub e IADocumentaçãoGuias de linguagens, frameworks e algoritmos

Linguagens de programação

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

Frameworks

Frameworks de front-end webNext.jsReactVue.js · NuxtSvelteKitAngular
Frameworks de servidorSpring BootDjangoFastAPIASP.NET CoreNestJS · Express
Frameworks de apps e desktopTauriFlutterReact NativeElectron

Algoritmos

Fundamentos de algoritmosAnálise de complexidade · Ordenação · Busca · Estruturas de dados básicas · Árvores e heapsAlgoritmos essenciaisBusca em grafos · Caminho mínimo e árvore geradora mínima · Programação dinâmica · Algoritmos gulosos · Divisão e conquista · BacktrackingAlgoritmos avançadosAlgoritmos de strings · Matemática e teoria dos números · Manipulação de bits · Árvores de segmentos · Union-FindAlgoritmos práticosEstratégia para entrevistas de código · Cache LRU · Limitação de taxa · Hashing consistente
Toda a documentação de desenvolvimento
Comunidade
ProjetosDescubra criadores e trabalhosRegistros de desenvolvimentoDecisões e aprendizadosPromptsInstruções reutilizáveisProblemas de ferramentas de IAProblemas e contornos de Claude, Codex, GeminiVitrineResultados concluídosGuia da comunidadeComo construímos em aberto
Colabore
Transferência técnicaApps nativos em Rust e eguiConstrução de site10 idiomas, contas, documentação e downloadsConstrução de app de desktopRust e egui, sem WebViewPipeline de lançamento e pagamentoAssinatura, MSI, deb, rpm, AppImage, hashesParceiro de vendasRecomende e ganhe 30%ContatoDesenvolvimento, parcerias e investimento
Serviços
Área de trabalho remotaAcesse seu computador pelo navegadorPacotes de instalação sob medidaSó o necessário, configurações pré-carregadas
Comprar
PT
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
Entrar
Entrar
TASTEDEV

De pequenas ferramentas a um desenvolvimento melhor.

support@tastedev.netApoiar TASTEDEV
ProdutosLinha de produtosComprarDocsDownloadsMarketplaceSuporte
ComunidadeProjetosRegistros de desenvolvimentoPromptsProblemas de ferramentas de IAVitrine
PolíticasPolítica de privacidadeTermos de usoTermos de assinaturaReembolsoDiretrizes da comunidade
ContaEntrarCriar conta
Visitantes
Hoje
012345678901234567890123456789012345678901234567890123456789
Ontem
012345678901234567890123456789012345678901234567890123456789
Visualizações totais
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
Empresa
GXSOFT
Representante
CHOI YOUNG GU
Número de registro comercial
853-44-00368
Endereço
9F V24, 351 Gyeongin-ro, Michuhol-gu, Incheon, Republic of Korea
Telefone
+82-10-4404-1523
E-mail
whitecalvin@tastedev.net
Responsável pela privacidade
CHOI YOUNG GU

© 2026 TASTEDEVAs informações dos produtos se baseiam em fontes de desenvolvimento verificadas.Lançado · em melhoria

Documentação
Árvores de segmentos
Árvores de segmentosImplementação de referênciaGuia passo a passoDocumentação oficial e recursosDiscussõesComentários

Outros algoritmos

Fundamentos de algoritmos5
Análise de complexidadeOrdenaçãoBuscaEstruturas de dados básicasÁrvores e heaps
Algoritmos essenciais6
Busca em grafosCaminho mínimo e árvore geradora mínimaProgramação dinâmicaAlgoritmos gulososDivisão e conquistaBacktracking
Algoritmos avançados4
Algoritmos de stringsMatemática e teoria dos númerosManipulação de bitsUnion-Find
Algoritmos práticos4
Estratégia para entrevistas de códigoCache LRULimitação de taxaHashing consistente

Algoritmo

Árvores de segmentos

Uma árvore de segmentos responde consultas de soma ou mínimo em intervalos e atualiza valores em O(log n); a árvore de Fenwick é a alternativa leve para somas.

Começar o guiaDiscussões

Uma árvore de segmentos é uma árvore binária que guarda um resumo, como soma, mínimo ou máximo, de cada intervalo obtido ao dividir um vetor ao meio repetidamente. A raiz cobre o vetor inteiro, cada folha cobre um único elemento e cada nó interno combina seus dois filhos. Assim, qualquer pergunta sobre um intervalo contíguo é respondida combinando poucos nós.

Somas de prefixo respondem somas de intervalo em O(1), mas precisam de O(n) para absorver uma única alteração; um vetor simples é atualizado na hora, mas cada consulta custa O(n). Uma árvore de segmentos faz tanto atualizações pontuais quanto consultas de intervalo em O(log n), por isso é a ferramenta certa quando os valores mudam o tempo todo e as consultas não param de chegar. Com propagação preguiçosa, ela também aceita atualizações de intervalo, como somar um valor a um trecho inteiro, em O(log n).

Comece entendendo onde as somas de prefixo deixam a desejar, desenhe à mão uma árvore pequena e acompanhe quais nós uma consulta e uma atualização percorrem. Depois, escreva você mesmo a implementação iterativa curta e uma árvore de Fenwick, e pratique com problemas clássicos como mínimo em intervalo, contagem de inversões e soma em intervalo com atualizações de intervalo.

Nesta página

  1. Destaques
  2. Onde é usada
  3. Implementação de referência
  4. Guia passo a passo
  5. Documentação oficial e recursos
  6. Discussões
  7. Comentários

Destaques

Resumos de intervalos divididos ao meio

Cada nó cuida de um intervalo do vetor e guarda sua soma ou seu mínimo; qualquer operação associativa com elemento neutro cabe na mesma estrutura.

Atualizações e consultas em O(log n)

Alterar um elemento recalcula apenas um caminho da folha até a raiz, e uma consulta de intervalo combina no máximo dois nós por nível.

Atualizações de intervalo com propagação preguiçosa

Uma atualização de intervalo deixa uma anotação nos nós que a cobrem e só a repassa aos filhos quando uma operação precisa descer.

Uma alternativa leve: a árvore de Fenwick

Para operações inversíveis como a soma, uma árvore de Fenwick (BIT) alcança a mesma complexidade com um vetor de n + 1 posições e poucos laços curtos.

Onde é usada

  • Problemas de consulta em intervalos em entrevistas e maratonas
  • Rankings e tabelas de frequência acumulada
  • Totais e máximos em intervalos de métricas de séries temporais
  • Geometria com varredura e sistemas de reservas

Implementação de referência

Uma árvore de segmentos iterativa: os elementos ficam na segunda metade de um vetor de tamanho 2n e cada posição anterior guarda a soma de seus dois filhos. update sobe da folha até a raiz recalculando as somas, e query sobe a partir das duas pontas do intervalo semiaberto [left, right), somando apenas os nós da borda. Ao executar, o programa imprime 26, 17 e 28.

segment_tree.py

class SegmentTree:
    """Iterative segment tree: point update and range sum in O(log n)."""

    def __init__(self, values):
        self.n = len(values)
        self.tree = [0] * self.n + list(values)
        for i in range(self.n - 1, 0, -1):
            self.tree[i] = self.tree[2 * i] + self.tree[2 * i + 1]

    def update(self, index, value):
        i = index + self.n
        self.tree[i] = value
        while i > 1:
            i //= 2
            self.tree[i] = self.tree[2 * i] + self.tree[2 * i + 1]

    def query(self, left, right):
        """Sum of values[left:right] (half-open range)."""
        total = 0
        lo, hi = left + self.n, right + self.n
        while lo < hi:
            if lo & 1:
                total += self.tree[lo]
                lo += 1
            if hi & 1:
                hi -= 1
                total += self.tree[hi]
            lo //= 2
            hi //= 2
        return total


if __name__ == "__main__":
    tree = SegmentTree([5, 3, 7, 9, 6, 4, 1, 2])
    print(tree.query(2, 6))  # 7 + 9 + 6 + 4 = 26
    tree.update(3, 0)
    print(tree.query(2, 6))  # 7 + 0 + 6 + 4 = 17
    print(tree.query(0, 8))  # 28
python segment_tree.py

Guia passo a passo

Seis capítulos que levam você da instalação aos conceitos essenciais de Árvores de segmentos.

  1. ConceptsInglês
  2. How It WorksInglês
  3. ImplementationInglês
  4. ComplexityInglês
  5. Practice ProblemsInglês
  6. Real-World UseInglês

Documentação oficial e recursos

  • OficialAtCoder Library: Segtree
  • AprenderSegment Tree - cp-algorithms
  • AprenderFenwick Tree - cp-algorithms
  • AprenderVisuAlgo: Segment Tree
  • ReferênciaSegment tree (Wikipedia)
  • ReferênciaFenwick tree (Wikipedia)
  • ReferênciaPrefix sum (Wikipedia)
  • ComunidadeEfficient and easy segment trees (Codeforces)

Discussões

Iniciar uma discussão

Tire dúvidas, compartilhe experiências e troque opiniões sobre Árvores de segmentos.

Ainda não há discussões. Comece a primeira.

0 comentários

Principais comentáriosMais recentes primeiro

Fazer login · Faça login para deixar um comentário.