It's not necessary to use STL most of the time when doing algorithmic problems. You should be proficient at writing vanilla C++ code though. They give you the limits, so create arrays that are of that size. The point of algorithmic problems is to test algorithms, not software development skills.
That said, proficiency in algorithms helps a lot when making software. Plus, hard algorithmic problems are just fun to solve. It's great to finally discover an amazing idea after a lot of time spent thinking
I recommend checking out the Intro to Algorithms book that someone mentioned earlier. It's a bit dense if you're new to algorithms though.. Also, if you're interested, check out the USACO training site. It's designed for high-schoolers in the US who are interested in participating in the International Olympiad in Informatics, but it's very useful for learning because it starts with basic algorithms like sorting, searching, etc., and moves up to more advanced topics such as graph theory and dynamic programming.
http://usaco.org/index.php?page=trainingAlso, check out competitive programming competitions. Competitions usually take place on the following sites every few days:
http://www.topcoder.com/http://codeforces.com/http://www.codechef.com/