This repository contains templates of useful algorithms and data structures coded in C++ for use in competitive programming.
Command
- Description
-
Misc
-
Debugging
to_string_main
- to_string method of the main data types and standard data structures.to_string_other
- to_string method of pairs, tuple and bitset.
-
Misc
misc_main
- Main macros of the template.misc_data_types
- Macros to shorten the writing of numeric data types.misc_pairs
- Macros to shorten the writing of tuples and pairs.misc_precise
- Macros for Sets the decimal precision to be used to format floating-point values on output operations.misc_infinity
- Macros defining the constants of infinity.misc_loops
- Macros to shorten loop writing.misc_min_max
- min and max functions by reference.misc_directions
- Array with the values to explore a 2D grid.misc_reference
- Macros to shorten the code writing of vector references.misc_math
- Some mathematical constants and functions.misc_vector_n_d
- Functions to shorten the writing of code in the creation of a vector of 2, 3 and 4 dimensions.misc_cond
- Functions and macros to shorten the code writing of some defined conditions..misc_bits
- Operations and tricks with Bits.misc_unique
- Remove duplicate values from a vector.misc_y_combinator
- Allows you to define a recursive Lambda function.
-
-
Geometry
2d_geometry_point
- Class Point.2d_geometry_polygon
- Class Polygon.2d_geometry_area
- Algorithm that calculates the area of a polygon.2d_geometry_perimeter
- Algorithm that calculates the perimeter of a polygon.2d_geometry_convex_hull_mc
- Convex Hull (Monotone Chain) algorithm.
-
Math
math_check_prime
- Primality test of a number.math_divisors
- Function for get all the divisors of a number.math_gcd_recursive
- Greatest common divisor (Recursive Implementation).math_gcd_iterative
- Greatest common divisor (Iterative Implementation).math_lcm
- Least common multiple.math_prime_factors
- function that calculates the prime factors of a number.math_sieve
- function to get all prime numbers in a given range.math_is_power_of_n
- Algorithm that checks if a number is a power ofn
.math_matrix
- Class that represents a 2D matrix with its matrix operations.math_polynomial
- Polynomial class with the following Operations (Addition, Subtraction, Multiplication, Division and Modulo).math_diophantine_best
- Diofandina function that meets the following condition |x|, |y| <= max(|a|, |b|, |c|).math_diophantine_std
- Standard implementation of the Diofandina Function.math_extgcd_iterative
- Euclid's Extended Algorithm (Iterative).math_extgcd_recursive
- Euclid's Extended Algorithm (Recursive).math_fft_iterative
- Fast Fourier Transform Algorithm (Iterative).math_fft_recursive
- Fast Fourier Transform Algorithm (Recursive).math_factorial
- Factorial implementation.
-
Query Range
range_query_segment_tree
- Segment Tree data structure.range_query_sum_immutable
- Query of sum in ranges (Immutable).ange_query_sum_2d_immutable
- Queries of sums in 2D ranges (Immutable).range_query_fenwick_tree_std
- Standard Indexed Binary Tree (fenwick tree).range_query_segment_tree_lazy_compress
- Segment Tree Lazy propagation data structure with compressed (add, max, min, index) operations.range_query_segment_tree_lazy_full
- Segment Tree Lazy propagation data structure with (add, max, min, index) operations complete includes find_first and find_last methods.range_query_segment_tree_lazy_template
- Template of the Segment Tree Lazy propagation data structure.range_query_sum_lower_bound_segment_tree_lazy
- Lower Bound algorithm in the Segment Tree Lazy.range_query_find_less_than_segment_tree_lazy
- Find the rightmost minor element of a given value in the Segment Tree Lazy.range_query_dynamic_segment_tree
- Implementation of a Segment Tree with Dynamic nodes.range_query_persistent_segment_tree
- Implementation of a Persistent Segment Tree.range_query_sqrt_decomposition
- SQRT Decomposition implementation using Bucket.range_query_sparse_table_std
- Sparse Table implementation.
-
Graph
graph_graph
- Parent class of the representation of a graph.graph_digraph
- Child class representing a directed graph.graph_undigraph
- Child class representing an undirected graph.graph_dijkstra_std
- Implementation of the Dijkstra Algorithm.graph_dijkstra_path
- Dijkstra algorithm that allows to reconstruct the route.graph_dsu
- Disjoint Set Union data structure.graph_toposort_dfs
- Topological sorting algorithm using dfs.graph_kruskal
- Kruskal's algorithm (Minimum Spanning Tree).graph_scc_kosaraju
- Kosaraju algorithm to search for Strongly Connected Components (SCC).graph_bellman_ford
- Bellman Ford standard algorithm.graph_find_cycle
- Find circles in a Graph.
-
Data Structure
data_structure_mos_algorithm
- implementation of Mo's Algorithm.data_structure_trie_automaton
- Implementation of the Prefix Tree through an Automata.data_structure_trie_dynamic
- Implementation of the Prefix Tree through a Dynamic Node.data_structure_tree_order_statistic
- Implementation of a Tree Order Statistic in Set and Map.
-
Numeric
numeric_mint_full
- Modular arithmetic template.numeric_mint_compress
- Compressed Modular Arithmetic Template.numeric_mod
- Basic Modular Arithmetic Template.numeric_bigint
- Complete Template to do numerical operations with very large numbers.numeric_fastpow
- Fast Exponentiation.
-
String
string_suffix_array
- Suffix Array algorithm.string_kmp
- Knuth-Morris-Pratt (KMP) algorithm.string_lps
- Longest prefix which is also suffix.string_manacher
- Manacher algorithm (Find all palindrome substring of a string in O(n)).string_split
- Split function in string.
-
Combinatorics
combinatorics_combinations_permutations
- Methods that allow counting the number of combinations and permutations of a set of elements.combinatorics_next_combination
- Method that generates all the combinations of a set ofn
elements with subsets ofk
elements.combinatorics_all_combinations_backtracking
- Method that generates all the combinations of a set ofn
elements with subsets ofk
elements using backtracking.
-
Random
random_init
- Generate random value in a range.random_permutation
- Generate random permutation.random_vector
- Generate a random vector.
-
Searches
searches_binary_search_I
- Standard binary search implementation.searches_binary_search_II
- Second Implementation of binary search.searches_binary_search_III
- Implementation of binary search based on Binary Jumping.
-
Techniques
techniques_divide_and_conquer
- Template of the Divide and Conquer Technique.techniques_sliding_windows
- Sliding Window Technique Template.techniques_sweep_line
- Template of the Sweep Line Technique.techniques_two_pointer1_pointer2
- Template of the Two Pointers Technique in two sequences.techniques_two_pointer_left_right_boundary
- Template of the Two Pointer Technique "Left and Right Boundary".techniques_two_pointers_old_and_new_state
- Template of the Two Pointer Technique "Old and New State".techniques_two_pointers_slow_fast
- Template of the technique of two pointers "Slow and fast pointer".
-
IO - Input/Output
io_print
- Print multiple variables with short code writing.io_read_write
- Read data from (vector, list, forward_list or deque) and print it.
-
Template
template_main
- Template with Task for c++17.template_std
- Template for c++17.template_test_case
- Test case snippet.template_usaco
- Template for usaco.orgtemplate_spoj
- Template for spoj.comtemplate_std_leetcode
- Template for leetcode.comtemplate_random
- Template to generate random test cases.
-
Debugging
- Some components of the source code of this folder were taken from the-tourist/algo
misc > debug.cpp
➡️ By Gennady Korotkevich (Tourist)
- Some components of the source code of this folder were taken from the-tourist/algo
-
Graph
- Some components of the source code of
graph/graph_digraph.cpp
,graph/graph_graph.cpp
andgraph/undigraph.cpp
were taken from the-tourist/algograph > ...
➡️ By Gennady Korotkevich (Tourist)
- Some components of the source code of
-
Numeric
-
Some components of the source code of
numeric/numeric_mint.cpp
were taken from the-tourist/algonumeric > mint.cpp
➡️ By Gennady Korotkevich (Tourist) -
Some components of the source code of
numeric/bitint.cpp
were taken from indy256/codelibrarynumeric > bitint.cpp
➡️ By Andrei Navumenka
-
-
String
-
Some components of the source code of
string/string_suffix_array.cpp
were taken from ekzhang/librarysuffix_array.cpp
➡️ By Eric Zhang -
Some components of the source code of
string/string_hashing.cpp
were taken from mavd09/notebook_unalString/Hashing.cpp
➡️ By Osman Jimenez, Manuel Vergara and Víctor Ramírez -
Some components of the source code of
string/string_hashing_dynamic_compress.cpp
were taken from ekzhang/libraryhashing_bit.cpp
➡️ By Eric Zhang
-
-
Query Range
- Some components of the source code of this folder were taken from the-tourist/algo
data > segtree.cpp
andsparsetable.cpp
➡️ By Gennady Korotkevich (Tourist)
- Some components of the source code of this folder were taken from the-tourist/algo
-
Combinatorics
- Some components of the source code of this folder were taken from indy256/codelibrary
cpp > combinatorics > enumerating_combinations.cpp
➡️ By Andrei Navumenka (indy256)
- Some components of the source code of this folder were taken from indy256/codelibrary