Задача 1. Илья Мишуров
Задача 4. Эмиль Рахимов
Какие из пар операций дистрибутивны:
а) $(\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})$ [не попало на практику]?
Научимся избавляться от дистрибутивности. Какие из перечисленных операций дистрибутивны сами с собой:
а) $+$;
б) $\cdot$;
в) $\min$;
г) $\oplus$;
д) $\wedge$;
е) $\vee$;
ё) $\gcd$;
ж) $\mathrm{lcm}$?
Что общего у всех подошедших примеров [ответ — это идемпотентные коммутативные операции (то есть $a\times a = a$, $a\times b=b\times a$)]? Как сделать дерево отрезков в неподошедших случаях?
а) Постройте дерево отрезков с методами set(i, x)
и min(L, R)
.
б) Как найти наименьший индекс минимума в дереве?
в) Как найти число минимумов в дереве?
Научимся избавляться от декомпозируемости операции: рассмотрим массовую операцию, которая не выражается через двуместную операцию.
а) постройте дерево отрезков с методами 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}}$;
Дан массив из чисел, постройте структуру данных с методом find(l, r, k)
: найти $k$-ю порядковую статистику среди $a_\ell, \ldots, a_{r-1}$.
Подсказка 1. Постройте структуру данных, позволяющую добавить, удалить элемент из мультимножества и позволяющую найти $k$-ю порядковую статистику.
Подсказка 2. Примените персистентность и решите исходную задачу.