This site is outdated and no longer maintained. Please visit our new site.
Highly recommended reads for those who are starting out. In particular, everyone should know how to do I/O (input/output) and dynamic programming. Introduction to Algorithms
The following websites not only contain many problems, but they also host programming contests! A great place to practice under time pressure. You may also read code submitted by other users.
For a broader variety of problems you can also visit the following sites.