Although you understood the importance of practice, I still want to reiterate it. Practice is the key! As far as I know, ACRush and Petr have many years of experience of practicing and competing in serious algorithmic contests such as IOI, ACM, etc. They have solved thousands of algorithmic problems and counting. Through that hard working process, they polish their problem solving and coding skill to the very high level as you know. I am not sure hard working is enough to reach the level of Petr's or ACRush's but I believe it can push you further than you think you can be. Here are my concrete suggestions:
1) Read relevant chapters in CLRS (Introduction to Algorithms, kind of bible textbook).
2) Try to solve as many problems as you can in:
http://acm.uva.es/ (mix, some hard)
http://acm.timus.ru/ (mix, some hard)
http://www.spoj.pl/ (mix, many hard)
http://acm.sgu.ru/ (mix, many hard)
Topcoder.com (of course)
3) Solve the problems first then read experts' code to learn coding skill from them. Petr publishes his own TC screencasts in his blog: http://petr-mitrichev.blogspot.com/
You can learn a lot from watching them.
4) Practice consistently and never give up.
Good luck.