Семинар 2. Дерево отрезков

Четверг, 16 сентября 2021
Таймс, 2 этаж, ауд.204

Описание

Разбор прошлого домашнего задания

Задача 1. Илья Мишуров

Задача 4. Эмиль Рахимов

Задачи с практики

  1. Какие из пар операций дистрибутивны:

    а) $(\gcd, \mathrm{lcm})$;

    б) $(\mathrm{lcm}, \gcd)$;

    в) $(\gcd, +)$;

    г) $(+, \gcd)$;

    д) $(\wedge, \vee)$;

    е) $(\vee, \wedge)$;

    ё) $(\mathrm{whatever}, P_2)$ (здесь $P_2(x, y)=y$, $\mathrm{whatever}$ — произвольная операция); [не попало на практику]

    ж) $(P_2, \mathrm{whatever})$ [не попало на практику]?

  2. Научимся избавляться от дистрибутивности. Какие из перечисленных операций дистрибутивны сами с собой:

    а) $+$;

    б) $\cdot$;

    в) $\min$;

    г) $\oplus$;

    д) $\wedge$;

    е) $\vee$;

    ё) $\gcd$;

    ж) $\mathrm{lcm}$?

    Что общего у всех подошедших примеров [ответ — это идемпотентные коммутативные операции (то есть $a\times a = a$, $a\times b=b\times a$)]? Как сделать дерево отрезков в неподошедших случаях?

  3. а) Постройте дерево отрезков с методами set(i, x) и min(L, R).

    б) Как найти наименьший индекс минимума в дереве?

    в) Как найти число минимумов в дереве?

  4. Научимся избавляться от декомпозируемости операции: рассмотрим массовую операцию, которая не выражается через двуместную операцию.

    а) постройте дерево отрезков с методами set(i, x) и $f(L, R)=\sum\limits_{i=0}^{R-L-1}{(-1)^ia_{i+L}}$;

    б) постройте дерево отрезков с методами set(i, x) и $f(L, R)=\sum\limits_{i=0}^{R-L-1}{ia_{i+L}}$;

  5. Дан массив из чисел, постройте структуру данных с методом find(l, r, k): найти $k$-ю порядковую статистику среди $a_\ell, \ldots, a_{r-1}$.

    Подсказка 1. Постройте структуру данных, позволяющую добавить, удалить элемент из мультимножества и позволяющую найти $k$-ю порядковую статистику.

    Подсказка 2. Примените персистентность и решите исходную задачу.