I was asked a lot of questions about how one can start learning how to prepare himself to be able to participate in competitions like ACM. In fact I had the same question so I asked Ahmed Mohamed Kamel. as he was the student coach of the Egyptian team in IOI this year.
He said: "There are a lot of problems varying in difficulty from the very beginning (language newbies) to very advanced in algorithms and techniques.
1- To read articles I recommend wikipedia and TopCoder editorials, also Competitive Programming book (this book has everything about what you need). You can also benefit from our training site https://sites.google.com/site/acmaast/
2- To enter online contests and be ranked over the world, join TopCoder.com, Codeforces.com, uva.onlinejudge.org and spoj.pl and practice on their problems. There are thousands of problems there.
I asked him do I need to master data structure before start solving the problems but he answered saying"I think there is no need for advanced data structures at the moment.. Just learn the basics and solve!"
I hope all of you can benefit from this post. Thanks :)