The Topic List is designed to provide structured learning paths for Competitive Programming. Each topic is categorized by difficulty and importance to guide learners from basic to advanced levels.
Hi, I am YouKn0wWho and I have been doing CP for around 7 years and from the very beginning what I have been feeling is a need for a comprehensive topic list that will contain all sorts of topics from easy to advanced with corresponding tutorials, problem lists and templates so that I wouldn’t have to look at different sites, from here to there. So what do you do when you think something is missing from the world? Yeah, you create that thing! So here I am, sharing the ultimate topic list that you will need in CP.
I previously created a topic list in 2021 and posted it on Codeforces here. It got great responses. It got 4000+ upvotes and the blog website has been visited 200k+ times! But it contained links to only 1-2 resources and problems per topic and it didn’t contain basic topics for beginners. Also, there was no way of tracking your progress.
Then in 2024, I decided to improve it, by a lot. It took me on average 6h-10h per day for straight one month to complete this project (also I was doing a full-time job during the whole time). I hope it was worth it! I am also keeping it updated and adding new topics, resources, and problems regularly. Also I am adding new features that people are asking for.
A topic is a concept or a technique that is used in solving problems. In this topic list, not all topics are actual topics per se, some are useful techniques or an educational problem or resource but contains ideas which can be used in future problems.
Each topic is classified by difficulty and importance, and is accompanied by a list of resources, templates, and problems to practice. The topics are categorized in a structured manner like all Number Theory topics are grouped together, all Graph Theory topics are grouped together and so on. Under each category, you will find some subcategories like under Data Structures you will find Segment Tree and under this subcategory, you will find different variations and topics related to Segment Tree.
Topics are classified into several difficulty levels:
Difficulty | Description |
---|---|
Very Easy | Suitable for beginners, like if your Codeforces rating is less than 1300. |
Easy | Suitable for experienced beginners, like if your Codeforces rating is around 1300-1800. |
Medium | For intermediate users, like if your Codeforces rating is around 1800-2200. |
Hard | For advanced users, like if your Codeforces rating is 2200+. |
Very Hard | For very advanced users, like if your Codeforces rating is 2600+. Or if you are curious about the topic. |
Importance/Relevance is indicated by stars, which reflects the frequency, relevance and likelihood of topics appearing in a future contest.
Importance | Description |
---|---|
Frequent and you should know this. | |
Occasional and it is good to know. | |
Rare and learn it for the fun of it. |
Each topic has some resources, templates and practice problems.
A resource is a tutorial or a blog or a video that explains the topic. Resources are listed in the recommended order of study. But it would be better if you go through all the resources listed in the topic. I have also tried to add some comments on the resources to mention in which part of the resource you will find the topic.
A template is a code snippet that is used to solve problems related to the topic. Templates are provided as a reference and it is highly recommended to create your own templates.
You may not call it a template because some of them don’t support the generalized use of the topic. But you can use them easily if you understand the topic and solve problems using that template.
I have also attached some related problems to each topic so that you can practice the topic. Problems are taken from various online judges like Codeforces, AtCoder, CodeChef, etc. Starred problems are highly recommended for solving to grasp the topic thoroughly. Problems are organized by their relevance and difficulty concerning the topic. You can solve them in the given order.
Problems are classified into several difficulty levels. The difficulty means how hard the problem is w.r.t. to the difficulty level of this topic (so it's not same as the topic difficulty level).
You can filter topics by difficulty and importance. The topics will be displayed in a structured manner, with each category containing subcategories and topics.
We have also created some modules for specific difficulty level and importance level. You can select the module you want to learn.
You can also search for topics by name to quickly find the topic you are looking for. The search is case-insensitive and will return all topics that contain the search query.
Note that first the filtering happens and then the searching happens on the filtered topics.
Also you can type / on keyboard to search for topics as a shortcut.
You can track your progress by marking the topics you have completed and the problems you have solved. We will then show you the progress you have made in the topic list.
You can track the status of each resource and problem in the topic page. You can mark them as Not Started, Completed, Skipped, or Ignored. Additionally, we show all your skipped resources and problems in the main page under the "Skipped Items" button so that you can easily revisit them later.
We show two heatmaps in the topic list page. One heatmap shows the topics you have completed and the other heatmap shows the problems you have solved. This will be useful if you want to knowing you activity in the topic list at a glance.
You can create a team and invite your team members to join the team. By creating a team, you will be able to see the topics completed by your team members and a new team view will get unlocked. To create a team, go to the Teams page in the topic list.
In each topic page, besides the Resource, Template, and Problems section, you will find a + icon. Clicking on that will give you the option to contribute to that topic. You can add a new resource, a new template, or a new problem. Once you suggest a contribution, it will be reviewed by the admin and if it is found to be useful, it will be added to the topic page.
If you have any feedback, suggestions, or want to report a bug, feel free to send me a direct message on Codeforces or contact me on Discord: Join Discord Server. All public discussions regarding the topic list will be done in the Discord server.
There is a cost associated with maintaining the topic list, mainly the server cost. It will increase as the user base grows.
If you want to help me with this and if you like my work and want to send me a tip, you can send it here: Buy Me a Coffee. Any amount is appreciated. Thank you!
I have been doing this CP thing for around 7 years now! Like always, all I want to say is, please don't forget to enjoy the journey and have fun while riding the boat. Whatever you do, try to pick something you love and try to be good at that. I hope my little contribution will help you with your incredible journey. Best wishes, my friend.