Если по-серьёзному, то Кормен «Алгоритмы. Построение и анализ». Если проще, то можно, например, Меньшиков «Олимпиадные задачи по программированию». В первом случае тебя ждёт много теории. Во втором — много практики и чуть теории.
Имхо, лучший вариант прочесть сначала что-то простое типа того же Меньшикова, потом Кормена, а потом go на codeforces.ru и решать. Без практики на олимпиадах делать нечего.