| Phase | Main Topic | Problem List | Goal |
|---|---|---|---|
| 1 | Introductory Problems |
|
Master basic programming concepts and I/O handling. |
| 2 | Sorting and Searching |
|
Effectively apply sorting and binary search algorithms. |
| 3 | Dynamic Programming |
|
Solve optimization problems by breaking them into subproblems. |
| 4 | Graph Algorithms |
|
Master graph traversal and pathfinding algorithms. |
| 5 | Range Queries |
|
Use data structures like segment trees to handle queries efficiently. |
| 6 | Tree Algorithms |
|
Apply algorithms on tree data structures. |
| 7 | Mathematics |
|
Solve problems related to number theory and combinatorics. |
Core Mindsets for Competitive Programmers
1. Deconstruct and Conquer
Break every complex problem down into the smallest, simplest sub-problems. Solve simple cases first (e.g., for n=1, n=2) to build intuition before generalizing.
2. Recognize the Underlying Pattern
Most problems are variations of a known pattern or algorithm. Ask yourself: "Is this a sorting problem? A graph traversal? A DP problem in disguise?"
3. Obsess Over Constraints & Edge Cases
The constraints (e.g., N <= 10^5) are a huge hint about the required time complexity. Always consider edge cases: empty input, n=0, large values, etc.
4. Practice Deliberately
Don't just solve problems you already know how to solve. After a contest, upsolve: spend time understanding and implementing solutions for problems you couldn't solve.