Полезные ссылки

Пдф со всеми алгоритмами
Канал умпалумпы

Другая информация

Рекурсивные лямбда-функции Работающий, но медленный способ (вызов лямбды в несколько раз медленнее, чем вызов обычной функции):
function<res(args)> f = [&](args) {
  f(...);
};

(Например, function<void(char)> f = [&](char c))

Быстрый (скорость как у глобальных функций), но менее красивый и не поддерживаемый ejudge'ом способ:
auto f = [&](auto f, ...) -> return_type {
  f(f, ...);
};

(Например, auto f = [&](auto f, char c) -> void. Возвращаемый тип после стрелочки можно опустить, если нет рекурсии)

Откаты no-thinker
vector<pair<int *, int>> actions;

void set(int *x, int v) {
  actions.emplace_back(x, *x);
  *x = v;
}

void rollback() {
  auto [x, v] = actions.back();   actions.pop_back();
  x = v;

Теперь всюду (что надо уметь откатывать) вместо x = y, пишем set(&x, y) даже если это элемент вектора или массива: set(&a[i], y). Только вектор должен никогда не менять размер. Ну, и всё-таки придётся помучаться, если меняются разные типы (например, не только int'ы, как в примере).

Возможно, самый простой поиск любых касательных.
Преподаватели параллели 7
Сергей Мельников
Король Воскресений
Виктор Романенко
8 крек
Арсений Кириллов
Повелитель крокодилов
Леонид Данилевич
Убрал фото для игры в киллера