- Intro & Basics
- Data Types
- Variables
- I/O
- Conditional statement
- Loops & Arrays
- Strings & Functions
- Complexity & Binary Search
- Ad-hoc problems
- Freq. Array
- Cumulative Sum
- Two Pointers
- Greedy
- Sliding Windows
- STL I [Linear Containers]
- Vectors
- Queues
- Deques
- Stacks
- Pairs
- STL II [Non-Linear Containers]
- Map
- Set
- Priority
- Queue & Structs
- Bit-masking & Iterative Brute Force
- Recursion & Recursive Brute Force
-
Math I
- Primes
- Sieve
- Factorization
- Factorial
- GCD & LCM
-
Math II
- Fibonacci
- Big-integer
- Modular Arithmetic
- Binary Exponentiation
-
Math III
- Permutations & Combinations
- Preprocessing
-
DP I
- Intro
- MaxRangeSum
- KnapSack
- CoinChange
-
DP II
- Longest Increasing Subsequence (LIS)
- Longest Common Subsequence (LCS)
- Consecutive Dynamic Ranges
-
Graphs
- Graph Traversal and Basic Algorithms
- Graph Traversal
- Articulation Points and Bridges
- Bridge Tree
- Strongly Connected Components
- Kosaraju Algorithm
- Biconnected Components
- Shortest Path
- Single-Source Shortest Path
- All-Pairs Shortest Path
- Minimum Spanning Tree
- Prim's Algorithm
- Kruskal's Algorithm
- Special Graphs
- Euler Tour (for Eulerian Graphs)
- Maximum Cardinality Bipartite Matching
- Max Flow
- Edmonds-Karp Algorithm
- Dinic's Algorithm
- Tarjan's (Push-Relabel) Algorithm- Geometry
- Graph Traversal and Basic Algorithms
-
Strings algorithms
- Prefix Automaton (KMP)
- Suffix Trie
- Suffix Array
- Suffix Automaton
- Aho Corasick
- Z Algorithm
- Manacher
Please, check out the sheet before reading. The sheet is:
Complete and consistent roadmap for newcomers: What to solve & algorithms to learn in order
In the bottom row, there are different sheet pages such as Faq, Topics, CF-C2
CF-C1, C2 are (Codeforces Div2 C problems (or similar level from other OJs), but from easy to hard). Same for CF-D1, D2, D3
Covering most of the topics needed up to Codeforces Div2-D
Problems increase in difficulty per topic with intermediate easy/medium problems + ad-hoc problems
Speed problems to maintain speed goals
-
-
Problems are distributed in sheets CF-A, CF-B, CF-C1, ....CF-D3 It targets learning the knowledge/skills in a consistent and balanced way Every sheet page is on average harder than the previous sheet page This is my recommended way, though most camps/training-approaches don't use this style
-
See the sheet page (Topics1). It has the same sheet problems (CF-A to CF-D3) ordered by category and level, around 950 problems. Also checkout Topics2 page Ideas Quality column: P5 (important), P4(very interesting), P3(interesting), P2(good), P1(ok), Empty (normal) You can train using Blind-Order, and use Topics page as a guide to skip some problems Advantage: Mastering the algorithm till solving some hard problems in a short time Disadvantage: Discovering the algorithm behind the problem is an important skill. Given that you know the topic, you lose a good space to improve this skill Disadvantage: Being in the mode of specific algorithm lets you solve many of it easier. However, when solving in real contests, your mind is not so active on the specific topic
-