Учебник
Разборы алгоритмов: как приём устроен, когда он уместен и на чём с ним ошибаются. Читается отдельно от курсов.
То, без чего не обойтись ни в одной теме: как оценить решение до того, как оно написано.
От квадратичных до n log n, от подсчёта до порядковых статистик — и что из этого уже есть в стандартной библиотеке.
Бинарный поиск как дисциплина инварианта: по массиву, по ответу, по вещественному числу — и всё, что из него вырастает.
Приёмы, которые заменяют перебор пар одним проходом: префиксные суммы, два указателя, стек и очередь с минимумом.
Брать выгодное сейчас — и понимать, когда это приводит к верному ответу, а когда к правдоподобному вранью.
Делимость, простые числа, разложение на множители и арифметика по модулю.
Стек вызовов, ленивая динамика и генерация комбинаторных объектов — от перестановок до скобочных последовательностей.
Контейнеры стандартной библиотеки, итераторы и места, где язык ведёт себя не так, как ожидается.
Состояние, переход, база и порядок обсчёта. Классические постановки от лестницы до рюкзака.
Хранение, обход в глубину и обход в ширину и всё, что из них растёт: компоненты, двудольность, кратчайшие пути в невзвешенном графе, циклы, топсорт, сильная связность, мосты. Дальше — веса: Дейкстра, Флойд, Форд — Беллман.
От четырёх идиом про отдельный бит до динамики по подмножествам: маски как множества, подмаски, суммы по подмаскам, битсет, XOR и базис, код Грея, ним.
Векторы, два произведения и всё, что из них следует: прямые, отрезки, расстояния и пересечения.
Отрезок как пара событий: покрытие, объединение, вложенность, дуги на окружности и переход на плоскость.
Полиномиальное хеширование строк, хеши подстрок, коллизии и взломы, хеши множеств и деревьев.
Бордеры и префикс-функция, поиск подстроки, автомат, z-функция, бор, Манакер и Ахо — Корасик. Точные алгоритмы там, где хешей мало.
Времена входа и выхода, наименьший общий предок пятью способами, функции на пути и sparse table.
Лемма о безопасном ребре и три алгоритма из неё. Система непересекающихся множеств и приём «меньшее к большему».
Порядок пересчёта задаёт структура: обход дерева, топологическая сортировка или возрастание маски.
Устройство и запросы, составной узел, спуск, отложенные операции и алгебра пометок, разности, дерево по значениям, разложение по битам, порядковые статистики и сканирующая прямая.
Блоки по корню, отложенные метки, перестроение, прыжки и алгоритм Мо. Структура, которая пишется за десять минут и почти всегда проходит.
Выигрышные и проигрышные позиции, ретроанализ с ничьими, функция Гранди и сумма игр, игры на деревьях и графах, ним и его варианты, игра Уайтхоффа и поиск закономерностей.
Кун и Хопкрофт — Карп, теорема Кёнига и её следствия, покрытие путями, теорема Дилворта и каталог сведений.
Дерево поиска и куча в одном: split и merge, порядковые статистики, неявный ключ, вставки и переносы кусков, отложенные операции.
Структуры, которые хранят все свои версии: путь вместо копии, персистентное дерево отрезков, префикс как версия, откаты вместо версий.