Подскажите идею, как реализовать функцию прибавления на интервале в "Дереве отрезков", без рекурсивной реализации? Например для суммы. То есть после модификации отвечать на сумму на интервале.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
2 | atcoder_official | 163 |
4 | maomao90 | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | djm03178 | 152 |
Подскажите идею, как реализовать функцию прибавления на интервале в "Дереве отрезков", без рекурсивной реализации? Например для суммы. То есть после модификации отвечать на сумму на интервале.
Название |
---|
Извиняюсь, но зачем? Я всё время пишу групповую модификацию DFS-ом.
Да я и не спорю, что многие так делают. Все таки есть классический учебник e-maxx!
Причина не только в е-максе. Лично я никогда не пользовался нерекурсивным деревом отрезков исключительно потому, что мне как-то не нравится для каждой задачи с запросами на отрезках придумывать специфичный только для нее алгоритм.
Ну как сказать)) захотелось и не смог! Хочу узнать теперь а как все-таки ! Да и пишу я его всегда не рекурсивно.
Тут реализация с присваиванием на отрезке.
Так же само, как и любой простой запрос на отрезке.
Одним циклом спустится вниз, до того момента, как нам надо будет разойтись налево и направо. Потом один цикл пустить влево, и ещё один вправо.
Вот тут я искал максимум на отрезке не рекурсивно, можешь попытаться разобраться
Да реализовать не рекурсивно нахождение максимума и суммы я могу. Именно не могу прибавление на отрезке.
Для прибавления ещё понадобится стек, в котором надо запомнить обход, и потом в обратном порядке обновить значения в вершинах.
А вообще, это всё весьма бессмысленно =)
Ну хорошо, если получится выложу. А почему бессмысленно так и не понял))
Нет никаких преимуществ в сравнении с рекурсивной реализации.
Хотя, судя по тому, что выложил NSV, я просто не умею такое нормально реализовывать.
Здесь приведена хорошая нерекурсивная реализация ДО с модификацией на отрезке. Спасибо indy256! Ещё на этом сайте можно найти другие реализации ДО и вообще много всего интересного.
Здесь и здесь можно прочитать про нерекурсивную реализацию ДО, а также про то, как делать отложенные операции. В целом, на этом сайте тоже много разных вкусняшек! И здесь уже спасибо, наверное, andrewzta :)
Я ведь не могу прибавить на интервале и потом ответить с учетом этих действий на запрос суммы на интервале? Мне ведь все равно придется для этого пересчитывать все вершины дерева на этом интервале. И если все таки это можно то как? Как я понял я могу ответить на запрос о значение конкретного элемента быстро после модификации на интервале (точнее это я могу).
Можете. Petr рассказывал, как сделать такое с помощью дерева Фенвика, предлагаю уловить идею и сделать то же самое на дереве отрезков.
Можете. Достаточно обычного проталкивания в запросах.