1. Снизу 1.1 Основная идея, способ хранения на массиве 1.2 Реализация get(l, r), set(i, x) в предположении 2^k 1.3 Обобщаем до общего случая. Аккуратное доказательство. 2. Сверху 2.1 Пишем запрос чтения. 2.2 Хранение, не округляем до степени двойки 2.3 отличия от снизу: 4n, можно персистентизировать 2.4 Две леммы о числе вершин в уровне 2.5 Массовые модификации: +=, min; :=, +. 3. Динамическое 3.1 Через hashmap 3.2 Через ссылки 3.3 Через пожать 4. 2D 4.1 Простой 2D запрос: get(l, r, x, y): l<=i<=r, x<=ai<=y. 4.2 То же самое, но внутри BST 4.3 Считаем точки на плоскости. Похожесть на 4.1 4.4 Вставляем внуть ДО и точки с весами. 4.5 3D 5. Scanline 5.1 point -> число прямоугольников, сначала offline, потом персист 5.2 Сжимаем координаты 5.3 rectangle -> число точек внутри, сначала offline, потом персист 5.4 Сжимаем координаты 6. [skip] nth-element 6.1 [skip] За log^3 6.2 [skip] За log^2 6.3 [skip] Спуск для задачи k-й единицы 6.4 [skip] за log.