Skip to main content

The practice mindset

Competitive programming is a skill — and like any skill, it improves with deliberate practice. Here’s how to make the most of your training time.

Practice strategies

1. Solve problems slightly above your level

If you solve every problem easily, you’re not learning. If you can’t solve any, you’ll get frustrated. Aim for problems where you need to think for 20–40 minutes before finding the solution.

2. Upsolve after contests

After every contest, solve the problems you couldn’t finish during the contest. This is where the real learning happens.
Upsolving means solving contest problems after the contest ends. Read the editorial, understand the approach, and implement it yourself without copying code.

3. Learn topics systematically

Don’t just randomly solve problems. Follow a structured path:
  1. Learn the concept (read a tutorial or watch a video)
  2. Solve 5–10 problems on that topic
  3. Move to the next topic
  4. Revisit weak topics periodically

4. Time yourself

Practice under time pressure. Set a timer for each problem (30–60 minutes for practice, 2–5 hours for virtual contests).

5. Read editorials and others’ solutions

After solving (or failing to solve) a problem, always read the editorial. Look at top-rated users’ solutions to learn cleaner approaches.
DayActivityDuration
SaturdayVirtual contest on Codeforces2 hours
SundayUpsolve contest problems1–2 hours
MondayTopic study (e.g., DP)1 hour
TuesdaySolve topic problems1–2 hours
WednesdayTopic study (e.g., Graphs)1 hour
ThursdaySolve topic problems1–2 hours
FridayMixed practice / rest1 hour
Consistency beats intensity. Solving 2–3 problems daily is better than cramming 20 problems in one weekend.

Useful resources

What’s next?

Start solving

Begin with our curated beginner problem sheet.

Learn sessions

Dive into our structured Level 0 training sessions.