I noticed that most of the red coders in codeforces entered many Div2 contests at the beginning which made me assume that if I entered many Div2 contests and learned from the solutions of the problems that I couldn't solve that my performance shall go better. But when I entered a Div2 contest I solved 0 problems , I learned from the solutions in the editorial after then, but this made me ask if shall I participate in Div3 contests for sometime before entering the Div2 contests or shall I continue? For the Div3 contests I can solve some of their problems but at Div2 contests most of the time I can solve none of them in the timeframe of the contest, may be if I tried to solve each of them separately without a timeframe I can but it will take from me long time maybe several hours for each problem. Also I want to ask if training from the contests is the idea technique or shall I learn the topics separately and search for it's problems and if this is the right way for learning is there any reference that tells the order of the sub-topics of each topic to follow in the learning process?

Yeah, doing insanely difficult problems is not optimal IMHO. I remember a few years back where I would mostly try problems that were >900 rating points above my skill and I didn't improve too much at the time. Do problems that are slightly above your skill for optimal growth.

Do Div.3 or Div.4 and upsolve 2 or 3 problems after the contest. If you can't upsolve a problem don't read the editorial right away. Re-try the problem after two or three months and only read editorial after failing a second time (or don't and keep trying after another few months).

After upsolving a problem read the editorial and other people's solutions to see if there is a simpler way to solve it, or a simpler way to reach the solution. After that you should reflect and wonder "Why didn't I think of it this way?" "How can I change my approach so I can come up with this kind of things?"

It's not an exact science but I think you should usually only read editorials of failed problems if a technique that you don't know is required. (This will become more and more rare as you learn more stuff, and also as you become able to invent techniques during contests)

Of course, trying the same problem 20 times is a waste of time, so there does come a point where it makes sense to give in and just read the solution. But in these cases I still recommend you implement it and compare your code with other people's.

That was helpful, much appreciated

How I am doing it right now:

1.Choose a difficulty range which is suitable for you. Problems fitting in that range should be not too simple(you may work it out with some effort, or even cannot solve it on your own) yet not too hard(you can solve it fairly easily after reading the tutorial) for you. For me it is *1900-*2200. You can choose a range first and then adapt it based on the feedback.

2.Solve problems fitting in that range randomly. I highly recommend https://cftracker.netlify.app/problems which allows me to use a filter while randomly choosing problems.

3.Do not refer to tags when you solve problems, because you can't when you are competing in a contest.

4.Work hard.

Hope this will be helpful for you.

It is an interesting way of training, that was helpful thanks a lot.