ЛКШ 2016. Группа A. День 3. Простенькие структуры данных.
- C++
sort, merge
set_union, set_difference
lower_bound
vector::resize
partial_sum
- Фенвик
- Update в точке за O(logn)
- Поиск ассоциативной функции на префиксе за O(logn)
- Преимущества над деревом отрезков: нет дополнительной памяти, малая константа
- 2D-версия, 3D-версия
- Дерево отрезков
- Код. Построение за O(n), модификация в точке за O(logn), запрос на отрезке за O(log|R-L|)
- Релизация снизу: картинка с лесом
- Дерево отрезков сортированных массивов, 2D-запрос на статичном массиве за O(log2n)
- Задача: пусть есть структура, дающая "+" на отрезке, выразить через неё "+=" на отрезке.
- Большие координаты
- Offline и сжатие координат
- Динамическое дерево отрезков с запросами сверху
- Динамическое дерево отрезков с запросами снизу
- Динамическое дерево Фенвика
- Корневая
- По массиву. Задача: "Найти число элементов, равных x на отрезке. И += на отрезке."
- По запросам (отложенные операции). Перестраивать структуру каждые n1/2 шагов. Задача: "сколько числе от l до r? числа добавляются."
- Центроидная декомпозиция
- Выбор центра, рекурсивно от остаточных компонент. На выходе имеем parent[center], задающий дерево декомопозиции, и level[center]. Компонента центра v − вершины u : level[u] ≥ level[v] и они связны.
- Функция на пути (a, b): возьмём v = lca(a, b) в дереве декомопозиции. path[a,b] = path[a,v] + path[v,b], можно в min[level,v] хранить минимум на path[a,v]
- Минимум на пути за O(logn), за O(loglogn). Какие ещё функции умеем считать? Sum, Matrix Product, Gcd, Permutation Composition, кол-во смен цвета на пути.
- Количество путей длины ровно K.
- XOR на пути. Путь, на котором XOR равен S.
- Ближайшая вершина цвета c. Покраска одной вершины.