Want to test your competitive programming skills? Take a look at this Bachelor’s Thesis: Analysis and solution of a collection of algorithmic problems (by Rafael Eusebio López Martínez).
In competitive programming, one has to use knowledge in algorithms and data structures to find solutions to algorithmic problems, then put those a ideas into a correct computer program that solves the problem within given time and memory constraints. This activity involves learning about a wide range of complex data structures and algorithms, and many hours of training.
See also my review of the Competitive Programmer’s Handbook.