Competitive Programming

This is the companion web site for a book: "Competitive Programming 3: The New Lower Bound of Programming Contests" and its two past editions written by myself (Steven Halim - UVa status, Kattis status) and my younger brother (Felix Halim - UVa status, Kattis status) in 2010 - present (2018). This book is used in my course in School of Computing, National University of Singapore: CS3233 - Competitive Programming (2009-present) and available for wider audiences since 2010. This book contains a collection of competitive programming skills gained by solving more than 3 000+ UVa (1999-present) plus Kattis (2015-present) online judge problems.

Major update (Monday, 03 December 2018): We have updated almost all demo code that we have in CP3 into code that we will use in future CP4. We no longer use use the download page but use the following public GitHub repo instead:

Major update (Tuesday, 24 October 2017): CP3 is now available in Korean language. If you are Korean, we recommend that you get the Korean version that has been translated over the past 1+ year by lewha0. Here is the publisher link: Insight Book, Korea.


This book contains a collection of relevant data structures, algorithms, and programming tips written for University students who want to be more competitive in the International Collegiate Programming Contest (ICPC), high school students who are aspiring to be competitive in the International Olympiad in Informatics (IOI), coaches for these competitions, those who love problem solving using computer programs, and those who go for interviews in big IT-companies.

"I cannot imagine a better complement for the UVa Online Judge site."

"Competitive Programming is a unique resource that I recommend to any student interested in raising their algorithmic programming skills to the next level. It is packed with insightful tips and techniques that are hard to find elsewhere, and remarkably thorough in its use of examples and references to sample problems."


Our objective in writing this book is similar with the ICPC vision: To further improve humanity by training current students to be more competitive in programming contests. The possible long term effect is future Computer Science researchers who are well versed in problem solving skills. We use both C++ and Java code to illustrate the algorithmic concepts, i.e. we dislike vague pseudo-code commonly found in many other Computer Science textbooks. We also use visualization tool: VisuAlgo to help explain the data structure and algorithm concepts to our audiences and beyond.

Target Audiences