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