Competitive programming is useful for improving problem solving and preparing for technical interviews. The following plan is aimed at students who already know basic programming.
Months 1 and 2: Foundations
Start with the structures and algorithms you will use most often: - Arrays, strings and matrices - Linked lists, stacks and queues - Sorting and searching - Time and space complexity
**Weekly target:** 15 to 20 easy problems on LeetCode or Codeforces.
Months 3 and 4: Intermediate Topics
Move on to: - Trees and binary search trees - Graphs, BFS, DFS and shortest paths - Dynamic programming - Greedy algorithms - Two pointers and sliding windows
**Weekly target:** 10 to 15 medium problems.
Months 5 and 6: Advanced Topics
When the basics are comfortable, work on: - Segment trees and binary indexed trees - Network flow and strongly connected components - KMP, Z-algorithm and tries - Number theory and combinatorics - More advanced dynamic programming
**Weekly target:** 5 to 10 hard problems and one virtual contest.
Useful Resources
- CSES Problem Set: A good set of problems for structured practice
- Codeforces: Regular contests and editorials
- CP-Algorithms: Reference material for algorithms
- LeetCode: Practice for interviews and problem solving
Practice with Others
The Technical domain runs weekly competitive programming sessions. Working through problems with other students is a good way to compare approaches and find gaps in your understanding.