Как готовиться к олимпиадному программированию?
В большинстве олимпиадных задач лежит основа математики, алгоритмов, анализа.
И как в последствии - программирование, техника, инструменты.
А значит нужно во первых подготовиться по базису - математика и алгоритмы.
Притом математика в самом широком смысле: алгебра, комбинаторика, вычислительные методы, алгоритмы, дискретная математика, графы и тд. И каждую тему нужно подробно изучить.
И только на основе всего этого базиса можно качественно решать все задачи.
Естественно никто не отменял логику и образ мышления, это тоже нужно тренировать.
Это все тренируется с практикой, основываясь на теории.
После этого всего, уже закреплять знания в области техники, компьютеризации, алгоритмов, языков программирования, операционных систем, эвристического анализа, криптографии и т.п.
Материал, книги, задачи можно найти по всем вышеизложенным темам просто задав их в качестве параметров поиска в поисковых системах интернета.
Учите, запоминайте, практикуйтесь, и будет вам счастье!
Судя по вашему списку вы не знаете: сложность, комбинаторика, оптимизация перебора, динамическое программирование, графы, вычислительная геометрия.
www.ozon.ru/context/detail/id/6290126
www.ozon.ru/context/detail/id/2363462
www.ozon.ru/context/detail/id/4721432
codeforces.ru/problemset?order=BY_SOLVED_ASC
Проблема может возникнуть в том, что вы не сможете вытягивать задачи выше среднего уровня из-за проблем с математикой. Не в смысле, что вы не вспомните какую-нибудь теорему, а просто физически не сможете из ничего придумать решение или изобрести неизвестный вам алгоритм.