[0, 1, 0, 1, 2, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0]
. Последние 8 элементов изменены за счет +1 от всех трех отрезков и хранят, сколько отрезков покрывает [i..i+1]. Предыдущие 7 элементов хранят минимум. Так что видно, что в корне 0, а значит на всем отрезке 0..8 есть пустые места. Но чуть дальше стоит 1, а значит отрезок 0..4 покрыт хотябы по одному разу.</>
в редакторе). А то влпрос удалят за нарушение правил. Почему в новых языках программирования goto нет?
Нет. Мы же останавливаемся, когда текущая вершина покрыта целиком обновляемым отрезком. Не надо спускаться до листьев. В итоге спустимся до O(log n) вершин. Так, 1..6 разбивается на 1..3 и 4..6. 1..3 - на 1..1 и 2..3, а 4..6 - на 4..5 и 6..6.
Так же и при поиске минимума: рекурсинво спускаемся, пока текущая вершина не станет целиком лежать в искомом отрезке.
Мы обойдем максимум 4log n вершин, это можно доказать. После первого же деления пополам, потому что искомый отрезок есть и слева и справа, будет ситуация, что искомый отрезок касается отрезка-вершины с одного конца. В этом случае второе деление пополам сразу завершит одну из веток.