I used to encourage newcomers in our community to train using this sheet to avoid random training. By the end of the sheet, one will be very good up to Div2-D. It has been refined several times based on the received feedback..
Sheet link https://goo.gl/unDETI
Please, check out the sheet before reading. The sheet is
Complete and consistent roadmap for newcomers: What to solve & algorithms to learn in order
In the bottom row, there are different sheet pages such as Faq, Topics, CF-C2
CF-C1, C2 are (Codeforces Div2 C problems (or similar level from other OJs), but from easy to hard). Same for CF-D1, D2, D3
Covering most of the topics needed up to Codeforces Div2-D
Problems increase in difficulty per topic with intermediate easy/medium problems + ad-hoc problems
Speed problems to maintain speed goals
One can train in one of the following ways:
A) Blind-Order training style
Problems are distributed in sheets CF-A, CF-B, CF-C1, ....CF-D3
It targets learning the knowledge/skills in a consistent and balanced way
Every sheet page is on average harder than the previous sheet page
This is my recommended way, though most camps/training-approaches don't use this style
B) Topics-Based training style
See the sheet page (Topics1). It has the same sheet problems (CF-A to CF-D3) ordered by category and level, around 950 problems. Also checkout Topics2 page
Ideas Quality column: P5 (important), P4(very interesting), P3(interesting), P2(good), P1(ok), Empty (normal)
You can train using Blind-Order, and use Topics page as a guide to skip some problems
Advantage: Mastering the algorithm till solving some hard problems in a short time
Disadvantage: Discovering the algorithm behind the problem is an important skill. Given that you know the topic, you lose a good space to improve this skill
Disadvantage: Being in the mode of specific algorithm lets you solve many of it easier. However, when solving in real contests, your mind is not so active on the specific topic