Pick C++, learn the STL and how to read constraints, then take part in a contest every week and upsolve afterwards. Under 1200, practise implementation, sorting, greedy and basic maths. From 1200 to 1600, add binary search on the answer, prefix sums, BFS, DFS and simple DP. From 1600, add DSU, segment trees and harder DP.
What people tell me
I am in my first years of a computer science degree and I keep hearing about Codeforces and ICPC from seniors. I have solved some easy problems, but I do not know what to study next or in what order, and every list I find online has hundreds of topics. I get stuck on the second or third problem in contests and my rating barely moves. I want a plan that tells me what matters at my level and what can wait.
A composite of the messages behind this question, with personal details left out.
Key takeaways
- Choose C++ and learn the parts of the STL contests use: vectors, sort, set, map and priority_queue.
- Read the constraints first: they tell you which complexity, and so which technique, to aim for.
- Study the topics for your rating band and ignore the rest for now.
- Take part in one contest a week and upsolve the first problem you missed.
- Judge progress over months, not one round: ratings are noisy.
Treat it as a sport, not a syllabus
Competitive programming is a sport: you solve algorithmic problems against a clock, the judge tells you instantly whether you are right, and a rating tracks your level. Like any sport, you improve by playing regularly and reviewing your games, not by reading every textbook first. The long topic lists online are real, but most of those topics do not matter until you are much stronger. At every level, a small set of ideas decides most of your results.
Set up once
- Choose C++. Python and Java work for easy problems, but most contestants use C++ because it is fast and its standard library (the STL) has everything contests need. You do not need all of C++: vectors, pairs,
sort,set,map,priority_queueand a few algorithms cover a long way. - Write a short template you can type from memory, with fast input and output.
- Learn to read constraints. A judge runs very roughly 10^8 simple operations per second, so n up to 2 * 10^5 means you need about O(n log n), while n up to 20 hints at trying every subset. The competitive programming cheat sheet has a table for this.
- Make accounts on Codeforces and AtCoder.
What to learn at each rating
These bands use Codeforces ratings. They are typical patterns, not strict rules.
| Rating | What most problems need | Where to practise |
|---|---|---|
| Under 1200 | Careful implementation, simulation, brute force on small limits, sorting, simple greedy, strings, parity and gcd observations, long long where sums get big | Div. 3 and Div. 4 rounds, early AtCoder Beginner Contest problems, CSES Introductory Problems |
| 1200 to 1600 | Binary search on the answer, prefix sums, two pointers, greedy you can justify, constructive problems, BFS and DFS, simple DP, sieves and modular arithmetic | Div. 2 B and C, CSES Sorting and Searching and Graph Algorithms |
| 1600 and above | DP in many forms, DSU, Fenwick and segment trees, shortest paths, LCA, combinatorics with modular inverses, harder constructive and interactive problems | Div. 2 D and E, Div. 1, AtCoder Regular Contests, the Educational DP Contest |
The honest part: under 1200, the problem is rarely a missing algorithm. It is misreading the statement, an edge case like n = 1, or an int that overflowed. Getting faster and cleaner on easy problems moves your rating more than learning segment trees early.
The routine that actually works
- One contest a week, rated or virtual (a replay of a past contest with its timer).
- Upsolve after every contest. Take the first problem you could not solve and solve it the next day. Read only the first hint of the editorial if you are stuck, then close it and write the code yourself. This is where most improvement comes from.
- Topic practice on other days, with problems about 100 to 200 points above your rating.
- A brute force when unsure. Before submitting a greedy you are not sure of, write a slow, obviously correct version and compare them on small cases.
An hour most days beats a whole weekend once a month.
Resources that are enough
- The free Competitive Programmer's Handbook paired with the CSES Problem Set: read a chapter, solve the section.
- The USACO Guide for a clear order through the topics.
- cp-algorithms when you want a deep explanation of one technique.
Keep it in proportion
Your rating will go down sometimes; everyone's does. Judge your progress over three months, not one round. And do not use AI tools during rated contests: Codeforces restricts them, and your rating only helps you if it measures your own thinking. Outside contests, an AI that asks you questions and gives hints is a fine study partner.
The competitive programming roadmap turns all of this into stages for your level, from C++ basics to ICPC team play. It goes beyond the DSA roadmap, which is a good place to start if data structures are new to you. If you like the thinking but not the contests, that is fine too: read I enjoy technology but hate competitive programming.
If you want a plan built around your current rating and hours, join Sefism and, as a member, book a 1:1 session with me.
Was this answer helpful?
Your situation is not quite this one?
Members get written answers to their own questions, a roadmap built for them and feedback on their projects. Early access is open: sign up and your account is active shortly after. Prefer to talk? A free call works too.