These are the shortest on-ramp notes in this category and the ones most likely to be usable immediately in contest practice.
Fenwick Tree, Monotonic Stack and Queue, Segment Tree, Sparse Table, Disjoint Set Union
This branch focuses on structures that trade memory, invariants, or amortization for faster updates and queries.
Range-query workhorses, balanced trees, and dynamic forest tools.
This branch collects the data structures I expect to reach for repeatedly in contest code: small range-query tools, balanced trees, and dynamic structures that let an update stay local while the answer remains global.
I try to separate the notes by the kind of invariant they maintain:
prefix-based structures such as Fenwick trees,
interval-based structures such as segment trees,
set / sequence BSTs such as treaps and splay trees,
dynamic-forest structures such as link-cut trees.
That makes it easier to see which tool to try when the problem statement changes one assumption.
The labels are not cosmetic. They are there to signal the amount of prerequisite structure and implementation fragility you should expect before opening the note.
These are the shortest on-ramp notes in this category and the ones most likely to be usable immediately in contest practice.
Fenwick Tree, Monotonic Stack and Queue, Segment Tree, Sparse Table, Disjoint Set Union
These notes assume the base routine is already familiar and focus on the first real structural upgrades.
Two-Dimensional Fenwick Tree, Lazy Segment Tree, Ordered Set (Policy-Based Data Structures)
These are the notes where proofs, reductions, or implementation details become the main bottleneck.
Treap, Li Chao Tree, Persistent Segment Tree, DSU Rollback, Cartesian Tree, Wavelet Tree
These are the pointer-heavy or amortized tools that are usually worth revisiting only after the rest of the branch is comfortable.
Splay Tree, Link-Cut Tree
These are the finished note pages in this category, each with rendered TeX, C++ code, references, and practice suggestions.
A compact range-query structure for point updates, prefix sums, and frequency-based order statistics.
Maintain candidates in sorted order of value so next-greater and sliding-window extrema can be updated in linear time.
Extend the Fenwick tree idea to point updates and rectangle sums on a grid.
The general-purpose interval tree for logarithmic range queries and updates when Fenwick is too small.
The standard extension of a segment tree when range updates must stay logarithmic too.
A static range-query structure that turns immutable RMQ-style queries into O(1) lookups.
Union-find for dynamic connectivity and component bookkeeping when edges only merge components.
A randomized BST built from split and merge, with order statistics and clean structural recursion.
A self-adjusting BST that pays for flexibility with amortized analysis instead of explicit balance invariants.
A dynamic-forest structure built on splay trees for link, cut, reroot, and path-query operations.
An indexed balanced tree for order statistics when std::set is not enough and a full custom BST is overkill.
A segment-tree-style structure for maintaining a dynamic lower envelope of lines under point queries.
Path-copy only the changed nodes so every update creates a new version without destroying the old one.
A union-find variant that can undo merges, which is the missing piece behind offline dynamic connectivity.
Build a tree whose inorder traversal is the array order and whose heap property exposes range minima or maxima.
Recursively partition values so k-th order statistics and frequency queries on subarrays can be answered quickly.
The default order follows each note's dependency weight: early notes establish primitives, later notes reuse them or assume the same invariants without re-explaining them.
A compact range-query structure for point updates, prefix sums, and frequency-based order statistics.
Maintain candidates in sorted order of value so next-greater and sliding-window extrema can be updated in linear time.
Extend the Fenwick tree idea to point updates and rectangle sums on a grid.
The general-purpose interval tree for logarithmic range queries and updates when Fenwick is too small.
The standard extension of a segment tree when range updates must stay logarithmic too.
A static range-query structure that turns immutable RMQ-style queries into O(1) lookups.
Union-find for dynamic connectivity and component bookkeeping when edges only merge components.
A randomized BST built from split and merge, with order statistics and clean structural recursion.
A self-adjusting BST that pays for flexibility with amortized analysis instead of explicit balance invariants.
A dynamic-forest structure built on splay trees for link, cut, reroot, and path-query operations.
An indexed balanced tree for order statistics when std::set is not enough and a full custom BST is overkill.
A segment-tree-style structure for maintaining a dynamic lower envelope of lines under point queries.
Path-copy only the changed nodes so every update creates a new version without destroying the old one.
A union-find variant that can undo merges, which is the missing piece behind offline dynamic connectivity.
Build a tree whose inorder traversal is the array order and whose heap property exposes range minima or maxima.
Recursively partition values so k-th order statistics and frequency queries on subarrays can be answered quickly.
These are still intentionally shown as planned or outline topics rather than shallow filler. The branch should feel incomplete in honest places instead of fake-complete everywhere.
Raw files are still available here when you want the original TeX, C++, or statement assets.