Hi everyone, This is my very first Codeforces (CF) blog and my question is:

#### For people who can solve A,B,C (CF-Div2) level problems comfortably, how can they train to improve their skill to solve problems of D,E (Div2)/B,C (Div1) level efficiently. "Efficiently" here means within the contest time, or reasonably quick, e.g. less than 1h.

I know **practice makes perfect**, and did read some helpful blogs about practicing with DP problems, or some advanced data structure/algorithms, such as segment tree, suffix array, Z-algorithm, etc. However, I'd like to ask for more concrete and comprehensive advice/suggestions. For instance,

- what specific types of problems, algorithms, or data structures, etc., should we be familiar with?
- Besides algorithmic skill, what specific programming skill do we need to obtain?

Also, if you know helpful resources, such as tutorial, books, websites other than Codeforces, Topcoder, please share them. I think a lot of people, like me would be very grateful for your help. Thanks in advance!

what specific types of problems, algorithms, or data structures, etc., should we be familiar with— i have a simple approach, just take a look at editorials of past rounds and you'll see what types of algorithms and data structures were used most often)Do you think it takes "being great at maths" to be great at problem solving?

A B C D E is for indicating problems level. OK, I see. That's why toke me more then several hours to try to solve a E problem, but got TLE. It's really frustrated. I am trying to improve my level too. It's not very helpful to read Introduction to Algorithm again and again. So maybe it just take time to let everything sink in. I really afraid of those really hard problem now, feel like futile to work on them. But I will keep on doing that, anyway, hoping that one day I will be able to solve them all elegantly.

Many problems in Div1 are "ad hoc" problems and don't require special data structures or algorithms. Often you can just use regular arrays and basic programming techniques. More important is to develop your problem solving and mathematical skills.

For example, greedy algorithms are often difficult to come up with, but once you know how to solve the problem, the coding part is easy.

Dynamic programming and segment tree are basic tools and you should know them well. Suffix array and Z-algorithm are advanced techniques and they are rarely needed in contests. I would suggest not to spend too much time for memorizing complex algorithms.

RESPECT

My approach (though I am yet too low level to give this kind of advice) is the following:

"If after every competition you give enough effort to understand EVERY problem which was offered and train yourself to be able to code solution to every one of them within 30 minutes, then you will inevitably progress with time."

So I think that for your progress it is more important what you do with those difficult problems after contest then during the contest. If you do nothing after contest, you'll never be able to solve them during the contest. If you always solve them after contest, at some point you'll train enough to be able to solve them during contest.

My advice is to solve all old div 1 E problems (it does not matter if you use editorial, even reading tutorial does not make it easy)

I could not do that but when I started solving a few, I was on Div 1 for a few times. :)) So give it a try.

I think that's a really bad advise.

It would be great if you could tell us why.

sure, I explained it in my comment below

yeah I agree with DuckLadyDinh Sir, Solving Div 1 E problmes will make you familiar to catch the logic behind them . It will be tough in the initial phase but when you get a pace you will definately able to do the Div 1 contest very easily.

alright then try this method and see if you can continue it for more than a month and at the end of this month tell everyone how many

Div1 Eproblems you solved during this time and what did you learn from those problems.i think going from solving Div2 A to Div1 E is absolutely ridiculous. have you ever seen the number of people who solve Div1 E in a contest? or even the number who solve Div1 E after a contest.

If you see number of who solve problem, may be everybody see it like you, and nobody solve it :))

The problem always lies in whether or not we can continue our strategy for long enough. If you cannot concentrate, any advice would be unhelpful, and mine is not an exception.

You can start reading a problem now and solving it month later. Then you can say you have tried it for a month, but it is no use. Time does not count, only the number of problems you solved count. A month or a year depends on how much you concentrate.

@g88 what u think , why coders stay away from div 1E even after the contest

Does my color make it bad??? :(

No, not at all. The person who asked this question is struggling with DIV1 B and C. I guess the best thing for him to do would be to solve a lot of problems related to several topics. Everyone has their own preference for learning and getting things done. I don't know much about the person who asked this question(like how much time he spends on coding or his DS knowledge), so I don't know what would work for him.

You've suggested him to solve DIV1 E problems(from level 3 to level 8). They require advanced DS or algorithms knowledge.

I'm an average coder and I attended a coding camp a couple of years ago where they started of with a DIV1 E problem(it was something related to 2D DP). Most of the things they said flew over my head cause I was not so familiar with the basics of DP.

I think if someone starts from DIV1 E, they'd probably get stuck and lose interest in CP soon. Its better to go step by step. Maybe what you said might work for a very few but they'd fall in the minority group.

right . stepping stones are very strong.