I am planning on picking up a copy of The Algorithm Design Manual soon. Unfortunately, my local library doesn't stock it so I'll have to fork over the cash, but it's worth it.
Also, competing is a good idea. It helps you evaluate yourself and there's more motivation to do well. Having a rating of 1500, say, would place you in a good position to crack even the most competitive phone interviews.
I did TopCoder for a few years in high school, and now I can confidently and quickly get most of the algorithmic questions that companies ask. It takes a while to get there, but it's worth it.
I've heard of TopCoder before, but I never bothered to give it much attention. I'll give it a shot though! Cheers.