Подскажите идею, как реализовать функцию прибавления на интервале в "Дереве отрезков", без рекурсивной реализации? Например для суммы. То есть после модификации отвечать на сумму на интервале.
| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3611 |
| 4 | jiangly | 3583 |
| 5 | strapple | 3515 |
| 6 | tourist | 3470 |
| 7 | dXqwq | 3436 |
| 8 | Radewoosh | 3415 |
| 9 | Otomachi_Una | 3413 |
| 10 | Um_nik | 3376 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 161 |
| 2 | adamant | 150 |
| 3 | Um_nik | 146 |
| 4 | Dominater069 | 144 |
| 5 | errorgorn | 141 |
| 6 | cry | 139 |
| 7 | Proof_by_QED | 136 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 9 | TheScrasse | 134 |
Подскажите идею, как реализовать функцию прибавления на интервале в "Дереве отрезков", без рекурсивной реализации? Например для суммы. То есть после модификации отвечать на сумму на интервале.
| Название |
|---|



Извиняюсь, но зачем? Я всё время пишу групповую модификацию DFS-ом.
Да я и не спорю, что многие так делают. Все таки есть классический учебник e-maxx!
Причина не только в е-максе. Лично я никогда не пользовался нерекурсивным деревом отрезков исключительно потому, что мне как-то не нравится для каждой задачи с запросами на отрезках придумывать специфичный только для нее алгоритм.
Ну как сказать)) захотелось и не смог! Хочу узнать теперь а как все-таки ! Да и пишу я его всегда не рекурсивно.
Тут реализация с присваиванием на отрезке.
Так же само, как и любой простой запрос на отрезке.
Одним циклом спустится вниз, до того момента, как нам надо будет разойтись налево и направо. Потом один цикл пустить влево, и ещё один вправо.
Вот тут я искал максимум на отрезке не рекурсивно, можешь попытаться разобраться
Да реализовать не рекурсивно нахождение максимума и суммы я могу. Именно не могу прибавление на отрезке.
Для прибавления ещё понадобится стек, в котором надо запомнить обход, и потом в обратном порядке обновить значения в вершинах.
А вообще, это всё весьма бессмысленно =)
Ну хорошо, если получится выложу. А почему бессмысленно так и не понял))
Нет никаких преимуществ в сравнении с рекурсивной реализации.
Хотя, судя по тому, что выложил NSV, я просто не умею такое нормально реализовывать.
Здесь приведена хорошая нерекурсивная реализация ДО с модификацией на отрезке. Спасибо indy256! Ещё на этом сайте можно найти другие реализации ДО и вообще много всего интересного.
Здесь и здесь можно прочитать про нерекурсивную реализацию ДО, а также про то, как делать отложенные операции. В целом, на этом сайте тоже много разных вкусняшек! И здесь уже спасибо, наверное, andrewzta :)
Я ведь не могу прибавить на интервале и потом ответить с учетом этих действий на запрос суммы на интервале? Мне ведь все равно придется для этого пересчитывать все вершины дерева на этом интервале. И если все таки это можно то как? Как я понял я могу ответить на запрос о значение конкретного элемента быстро после модификации на интервале (точнее это я могу).
Можете. Petr рассказывал, как сделать такое с помощью дерева Фенвика, предлагаю уловить идею и сделать то же самое на дереве отрезков.
Можете. Достаточно обычного проталкивания в запросах.