Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

seg #65

Merged
merged 1 commit into from
Jan 8, 2024
Merged

seg #65

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,56 +1,9 @@
# Segment Tree

<!-- DESCRIPTION -->
Consultas e atualizações em intervalos.
<!-- DESCRIPTION -->

# [Seg Tree](seg_tree.cpp)
Implementação padrão de Seg Tree

- Complexidade de tempo (Pré-processamento): O(N)
- Complexidade de tempo (Consulta em intervalo): O(log(N))
- Complexidade de tempo (Update em ponto): O(log(N))
- Complexidade de espaço: 4 *N = O(N)

# [Seg Tree Lazy](seg_tree_lazy.cpp)
Implementação padrão de Seg Tree com lazy update

- Complexidade de tempo (Pré-processamento): O(N)
- Complexidade de tempo (Consulta em intervalo): O(log(N))
- Complexidade de tempo (Update em ponto): O(log(N))
- Complexidade de tempo (Update em intervalo): O(log(N))
- Complexidade de espaço: 2 *4 *N = O(N)

# [Sparse Seg Tree](seg_tree_sparse.cpp)
Seg Tree Esparsa:

- Complexidade de tempo (Pré-processamento): O(1)
- Complexidade de tempo (Consulta em intervalo): O(log(N))
- Complexidade de tempo (Update em ponto): O(log(N))

# [Persistent Seg Tree](seg_tree_persistent.cpp)
Seg Tree Esparsa com histórico de Updates:

- Complexidade de tempo (Pré-processamento): O(N *log(N))
- Complexidade de tempo (Consulta em intervalo): O(log(N))
- Complexidade de tempo (Update em ponto): O(log(N))
- **Para fazer consulta em um tempo específico basta indicar o tempo na query**

# [Seg Tree Beats](seg_tree_beats.cpp)
Seg Tree que suporta update de maximo e query de soma

- Complexidade de tempo (Pré-processamento): O(N)
- Complexidade de tempo (Consulta em intervalo): O(log(N))
- Complexidade de tempo (Update em ponto): O(log(N))
- Complexidade de tempo (Update em intervalo): O(log(N))
- Complexidade de espaço: 2 *4 *N = O(N)
Seg Tree Esparsa, ou seja, uma seg tree que não guarda todos os nós, mas apenas os nós que são necessários para responder as queries, permitindo fazer queries em intervalos de tamanho arbitrário.

# [Seg Tree Beats Max and Sum update](seg_tree_beats_max_and_sum_update.cpp)
Seg Tree que suporta update de maximo, update de soma e query de soma.
Utiliza uma fila de lazy para diferenciar os updates
Seja $LEN$ o tamanho do intervalo em que a Seg Tree foi construída:

- Complexidade de tempo (Pré-processamento): O(N)
- Complexidade de tempo (Consulta em intervalo): O(log(N))
- Complexidade de tempo (Update em ponto): O(log(N))
- Complexidade de tempo (Update em intervalo): O(log(N))
- Complexidade de espaço: 2 *4 *N = O(N)
- Complexidade de tempo (Pré-processamento): $O(1)$
- Complexidade de tempo (Consulta em intervalo): $O(log(LEN))$
- Complexidade de tempo (Update em ponto): $O(log(LEN))$
92 changes: 5 additions & 87 deletions LaTeX/Almanaque.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1234,100 +1234,18 @@ \subsection{Segment Tree Beats Max Update}
\subsection{Segment Tree Esparsa}


Consultas e atualizações em intervalos.
Seg Tree Esparsa, ou seja, uma seg tree que não guarda todos os nós, mas apenas os nós que são necessários para responder as queries, permitindo fazer queries em intervalos de tamanho arbitrário.



\textbf{Seg Tree}

Implementação padrão de Seg Tree



\begin{itemize}
\item Complexidade de tempo (Pré-processamento): O(N)
\item Complexidade de tempo (Consulta em intervalo): O(log(N))
\item Complexidade de tempo (Update em ponto): O(log(N))
\item Complexidade de espaço: 4 *N = O(N)
\end{itemize}



\textbf{Seg Tree Lazy}

Implementação padrão de Seg Tree com lazy update



\begin{itemize}
\item Complexidade de tempo (Pré-processamento): O(N)
\item Complexidade de tempo (Consulta em intervalo): O(log(N))
\item Complexidade de tempo (Update em ponto): O(log(N))
\item Complexidade de tempo (Update em intervalo): O(log(N))
\item Complexidade de espaço: 2 *4 *N = O(N)
\end{itemize}



\textbf{Sparse Seg Tree}

Seg Tree Esparsa:



\begin{itemize}
\item Complexidade de tempo (Pré-processamento): O(1)
\item Complexidade de tempo (Consulta em intervalo): O(log(N))
\item Complexidade de tempo (Update em ponto): O(log(N))
\end{itemize}



\textbf{Persistent Seg Tree}

Seg Tree Esparsa com histórico de Updates:



\begin{itemize}
\item Complexidade de tempo (Pré-processamento): O(N *log(N))
\item Complexidade de tempo (Consulta em intervalo): O(log(N))
\item Complexidade de tempo (Update em ponto): O(log(N))
\item \textbf{Para fazer consulta em um tempo específico basta indicar o tempo na query}
\end{itemize}



\textbf{Seg Tree Beats}

Seg Tree que suporta update de maximo e query de soma
Seja $LEN$ o tamanho do intervalo em que a Seg Tree foi construída:



\begin{itemize}
\item Complexidade de tempo (Pré-processamento): O(N)
\item Complexidade de tempo (Consulta em intervalo): O(log(N))
\item Complexidade de tempo (Update em ponto): O(log(N))
\item Complexidade de tempo (Update em intervalo): O(log(N))
\item Complexidade de espaço: 2 *4 *N = O(N)
\end{itemize}



\textbf{Seg Tree Beats Max and Sum update}

Seg Tree que suporta update de maximo, update de soma e query de soma.

Utiliza uma fila de lazy para diferenciar os updates



\begin{itemize}
\item Complexidade de tempo (Pré-processamento): O(N)
\item Complexidade de tempo (Consulta em intervalo): O(log(N))
\item Complexidade de tempo (Update em ponto): O(log(N))
\item Complexidade de tempo (Update em intervalo): O(log(N))
\item Complexidade de espaço: 2 *4 *N = O(N)
\item Complexidade de tempo (Pré-processamento): $O(1)$
\item Complexidade de tempo (Consulta em intervalo): $O(log(LEN))$
\item Complexidade de tempo (Update em ponto): $O(log(LEN))$
\end{itemize}

\hfill
Expand Down
Loading