*The goal of this project is to translate at least some pages of the wonderful resource
http://e-maxx.ru/algo which provides descriptions of many special algorithms
especially popular in field of competitive programming.*

- Euler's Totient Function
- Euclidean algorithm for finding the GCD (greatest common divisor)
- Sieve of Eratosthenes
- Extended Euclidean Algorithm
- Binary Exponentiation
- Balanced Ternary
- Linear Diophantine Equations
- Modular Inverse
- Chinese Remainder Theorem
- Primitive Root
- Discrete Root
- Discrete Log
- Enumerating submasks of a bitmask
- Gray code
- Sieve of Eratosthenes Having Linear Time Complexity
- Arbitrary-Precision Arithmetic
- Fibonacci Numbers
- Finding Power of Factorial Divisor

- Disjoint Set Union
- Fenwick Tree
- Sparse Table
- Segment Tree
- Treap
- Sqrt Decomposition
- Sqrt Tree
- Modification of stack / queue for finding the minimum in $O(1)$

- String Hashing
- Rabin-Karp for String Matching
- Expression parsing
- Suffix Array
- Suffix Tree
- Z-function
- Prefix function
- Finding all sub-palindromes in O(N)
- Lyndon factorization

- The Inclusion-Exclusion Principle
- Binomial Coefficients
- Catalan Numbers
- Placing Bishops on a Chessboard
- Burnside's lemma / Pólya enumeration theorem
- Stars and bars

- Basic Geometry
- Length of the union of intervals on a line in O(N*logN)
- Oriented area of a triangle and predicate "clockwise"
- Intersection Point of Lines
- Circle-Line Intersection
- Circle-Circle Intersection
- Pick's Theorem - area of lattice polygons
- Lattice points of non-lattice polygon
- Area of simple polygon
- Convex hull trick and Li Chao tree

- Breadth First Search
- Depth First Search
- Bipartite Graph Check
- Topological Sorting
- Finding Bridges in O(N+M)
- Finding Bridges Online
- Finding Articulation Points in O(N+M)
- Checking a graph for acyclicity and finding a cycle in O(M)
- Finding a Negative Cycle in the Graph
- Floyd-Warshall - finding all shortest paths
- Number of paths of fixed length / Shortest paths of fixed length
- Dijkstra - finding shortest paths from given vertex
- Bellman-Ford - finding shortest paths with negative weights
- D´Esopo-Pape algorithm
- Finding Connected Components
- Lowest Common Ancestor
- Lowest Common Ancestor - Binary Lifting
- Lowest Common Ancestor - Farach-Colton and Bender algorithm
- Solve RMQ by finding LCA
- Lowest Common Ancestor - Tarjan's off-line algorithm
- Minimum Spanning Tree - Prim's Algorithm
- Minimum Spanning Tree - Kruskal
- Minimum Spanning Tree - Kruskal with Disjoint Set Union
- Kirchhoff Theorem
- Strongly Connected Components and Condensation Graph
- Maximum flow - Ford-Fulkerson and Edmonds-Karp
- Maximum flow - Push-relabel algorithm
- Maximum flow - Push-relabel algorithm improved
- Flows with demands
- Edge connectivity / Vertex connectivity
- 2-SAT

- Scheduling jobs on one machine
- Scheduling jobs on two machines
- Optimal schedule of jobs given their deadlines and durations