Как эффективно обрабатывать запросы вида "Найти сумму элементов, таких что x < a[i] < y на отрезке l < i < r" с изменением в элементе с помощью дерева отрезков?
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | jiangly | 3810 |
| 2 | Benq | 3676 |
| 3 | Kevin114514 | 3655 |
| 4 | maroonrk | 3463 |
| 5 | strapple | 3390 |
| 6 | Um_nik | 3387 |
| 7 | tourist | 3384 |
| 8 | heuristica | 3322 |
| 9 | turmax | 3319 |
| 10 | jiangbowen | 3291 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 155 |
| 2 | nik_exists | 150 |
| 2 | maspy | 150 |
| 4 | AmShZ | 142 |
| 4 | Um_nik | 142 |
| 6 | Errichto | 139 |
| 7 | adamant | 137 |
| 8 | maroonrk | 133 |
| 9 | BledDest | 132 |
| 10 | qwexd | 129 |
Как эффективно обрабатывать запросы вида "Найти сумму элементов, таких что x < a[i] < y на отрезке l < i < r" с изменением в элементе с помощью дерева отрезков?
| Название |
|---|



ну когда ты строишь дерево отрезков , в функции build там где l==r проверяй если число соответствует твоему условию то t[v]=a[l]; а если нет то t[v]=0;
3d Mo
Пусть для каждой вершины дерева отрезков мы храним весь ее подотрезок в двоичном сбалансированном дереве (например, в декартовом дереве). Понятно, что для изменения в элементе небодимо обновить этот элемент в
отрезках. Теперь рассмотрим запрос суммы. Понятно, что весь отрезок запроса мы можем разбить на
отрезков, которые есть в дереве отрезков. Теперь для каждого такого отрезка нам необходимо найти сумму всех элементов, для которых верно x < ai < y. Это легко сделать с помощью двоичного сбалансиванного дерева (дополнительно храним и обновляем сумму на поддереве), в котором хранится весь этот отрезок.
Итого получаем
на запрос и
на обновление элемента.
Если запросы даны offline, то можно для каждой вершины дерева отрезка найти все значения, которые там будут в какой-либо момент, и сжать их (для каждой вершины свое сжатие). После этого мы можем использовать более "статическую" структуру, например, дерево Фенвика. Запрос будет тоже за O(log2n), но вроде константа бинпоиска (сжатие) + Фенвика меньше, чем у декартова дерева.
Хорошее замечание :)
В некоторых задачах, например, 785E - Антон и перестановка, без этого довольно сложно поместиться в ограничения по времени.