When I was still in college, the BEST general-purpose training I ever received was in my ACM International Collegiate Programming Contest (ICPC) training, and the contests that followed. Topcoder was one of the methods we used to train for the contests, among Usaco, old ICPC contests, Project Euler, UVa (another set of contest problems). Some people used SPOJ and other such places.
From the years I was on the team, if I improved at anything, it was the ability to look at a problem, and solve it. I've gotten to use little bits of it in the year and a half I've been working, but it was more the experience I found profitable and would encourage anyone to do the same.
Disclaimer: I was on the UCF programming team for 5 years.