Дерево отрезков: обзор задач

Материал из Олимпиадное программирование в УлГТУ
Версия от 20:50, 9 июня 2016; Ctrlalt (обсуждение | вклад) (Новая страница: «== Запрос минимума (максимума) на отрезке == * Массив не меняется: Sparse table, O(1) * Прибавление…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Запрос минимума (максимума) на отрезке

  • Массив не меняется: Sparse table, O(1)
  • Прибавление к одному элементу: стандартная реализация дерева отрезков, O(logN)
  • Прибавление на отрезке: дерево отрезков с lazy propagation, O(logN)

Запрос индекса минимума (максимума) на отрезке

  • Прибавление к одному элементу: стандартная реализация дерева отрезков, либо в вершине вместе с индексом хранится величина максимума/минимума, либо эта величина проверяется в исходном массиве, O(logN)
  • Прибавление на отрезке: дерево отрезков с lazy propagation, в вершине вместе с индексом хранится величина максимума/минимума, O(logN)

Запрос суммы на отрезке

  • Массив не меняется: префиксные суммы, O(1)
  • Прибавление к одному элементу: стандартная реализация дерева отрезков, O(logN), либо дерево Фенвика, O(logN)
  • Прибавление на отрезке: дерево отрезков с lazy propagation (в push() сумма обновляется как t[v] += tAdd[v] *(vr - vl + 1)), O(logN)

Запрос НОД на отрезке

  • Массив не меняется: Sparse table, O(1)
  • Прибавление к одному элементу: стандартная реализация дерева отрезков, O(logN)
  • Прибавление на отрезке: 2 дерева отрезков: 1, 2 , O(logN)

Запрос количества нулей на отрезке

  • Массив не меняется: префиксные суммы, O(1)
  • Прибавление к одному элементу: стандартная реализация дерева отрезков, O(logN)
  • Присвоение на отрезке: дерево отрезков с lazy propagation, O(logN)
  • Прибавление на отрезке: ???

Запрос индекса k-го нуля на отрезке

  • Прибавление к одному элементу: запрос количества нулей на префиксе и спуск по дереву отрезков, O(logN)
  • Присвоение на отрезке: дерево отрезков с lazy propagation, запрос количества нулей на префиксе и спуск по дереву отрезков, O(logN)
  • Прибавление на отрезке: ???

Запрос максимального ряда нулей на отрезке

  • Прибавление к одному элементу: дерево отрезков, вершина хранит также максимальные длины префикса и суффикса из нулей и длину отрезка, O(logN)
  • Присвоение на отрезке: дерево отрезков с lazy propagation, вершина хранит также максимальные длины префикса и суффикса из нулей и длину отрезка, O(logN)
  • Прибавление на отрезке: ???

Запрос ряда с максимальной суммой на отрезке

  • Прибавление к одному элементу: дерево отрезков, вершина хранит также максимальные суммы префикса и суффикса и сумму всего отрезка, O(logN)
  • Прибавление на отрезке: дерево отрезков с lazy propagation, вершина хранит также максимальные суммы префикса и суффикса и сумму всего отрезка, O(logN)

Запрос количества чисел от a до b на отрезке

  • Массив не меняется:
  • Прибавление к одному элементу:
  • Прибавление на отрезке:

Запрос количества различных чисел на отрезке

  • Массив не меняется:
  • Прибавление к одному элементу:
  • Прибавление на отрезке:

Запрос k-й порядковой статистики на отрезке

  • Массив не меняется:
  • Прибавление к одному элементу:
  • Прибавление на отрезке: