Есть задача https://www.e-olymp.com/ru/problems/3507. Она уже обсуждалась на codeforces но, я так и не нашел ответа на нее. Простая идея в виде реализации обычного прибавления на отрезке и поиска числа на отрезке в виде получения каждого значения числа на отрезке l..r даёт 54% ответов. Есть вторая идея, которая основана частично на ответе одного из пользователей в пред теме по этой задаче и моих догадках. В каждой вершине хранится хеш-сет m, содержащий значения на отрезке, величина add, которую надо прибавить и первый first и последний last элементы на отрезке. Когда надо прибавить на отрезке, мы проверяем, если это текущий отрезок совпадает (или можно здесь проверять, лежит ли он полностью) с интервалом прибавления, то увеличиваем add на нужное число, если нет, то идем рекурсивно в потомков, а после этого first = first_левого_потомка + add_левого_потомка, last = last_правого_потомка + add_правого_потомка, чистим m и записываем туда модифицированные значения из потомков. Когда мы проверяем, то смотрим — если интервал для поиска лежит полностью в текущем отрезке, то проверяем есть ли в нем искомое число-add, если интервал не совпадает, то сравниваем первый элемент левого потомка + его add с первым элементом текущего отрезка + его add. Если не равны, то прибавляем к add потомка add предка. Тоже самое и для правого, только сравниваем последние элементы. После запускаем рекурсию в потомков. Такое решение, увы, дает лишь 17% ответов, большая часть по времени не укладывается, а несколько дают неверный ответ) Просьба подсказать/помочь с этой задачей.








