Answer by Nick Wu:
1) Practice.
2) Do step 1.
Of course, that’s what everyone tells you, so let’s try to be a little more useful here.
1) Identify your current skill level.
You can do this in a variety of ways. The easiest way is to do a few SRMs and get a rough idea of what your rating is, and consequently, what problems you should work on. Use your performance in a few contests or solve a few problems in practice to see where you are.
2) Start pushing your boundaries.
I’ll give some rough information on what problems you should be working on given your color rating (these aren’t hard rules, but I believe they’re reasonable things to try.)
- Grey: Be more consistent on solving div2 easy problems.
- Green: Get faster at solving div2 easy problems, start building consistency on div2 medium problems.
- Blue: Build consistency on div1 easy problems.
- Low yellow (Below ~2000): Start building speed on div1 easy problems.
- High yellow (Above ~2000): Start working on solving div1 medium problems.
- Red: Start building speed in div1 medium problems.
The hard problems are designed to be solved by very few people so I don’t include them in my list. Yellow coders may be able to use div2 hard problems as a substitute, but you should be able to get by with just div1 medium problems.
3) Repeat steps 1 and 2.
You’ll constantly be improving, so you should work on problems that keep you interested. If you’re a blue coder, there’s not too much point to working on div2 easy problems since you will never actually do one in a regular SRM. Instead, working on building consistency in div1 easy problems, although more difficult, will be more worthwhile. Re-evaluate your skill level every so often (this will be done implicitly if you do more SRMs) and calibrate your training to match.