Нужно прибавлять на отрезке и находить сумму. Но у меня выводит ВА. Я понимаю, что там есть туториал где Павел пишет код, но я поддерживаю такой инвариант что когда мы вошли в вершину то ответ там уже посчитан правильно, т.е. пишу чуть-чуть по другому. И я не могу понять почему у меня ВА. Я попытался найти контрпример, но не смог. Прошу помочь.
1 лайк
Проверь свой push, он не правильный и еще в get и upd ты его запускаешь не в правильных местах.
2 лайка
Почему я делаю пуш неправильно? Если вершина частично входит в отрезок то я проталкиваю в детей пока не найдется отрезок который полностью находится в отрезке l r. Может я чего то не понимаю
1 лайк
Я подумал что это какой нибудь corner case но в листах я пуш не делаю. Можете объяснить что не так?
1 лайк
void push(int v, int tl, int tr){
if(t[v].add == 0)
return;
int tm = (tl + tr) >> 1;
t[v + v].add = t[v].add;
t[v + v + 1].add = t[v].add;
t[v + v].sum += 1LL * (tm - tl + 1) * t[v].add;
t[v + v + 1].sum += 1LL * (tr - tm) * t[v].add;
t[v].add = 0;
}
Ты когда закидываешь lazy propogation в сыновья присваиваешь, хотя должен добавлять.
И насчет пуша и его места оказывается все окей, я ошибся)
2 лайка
без комментариев
Спасибо большое!
2 лайка