fengzhaoyu @ 2024-07-15 14:34:51
谁能解释一下push_up函数中为什么是加而不是加等于?
void push_up(int x)
{
t[x].v=t[x<<1].v+t[x<<1|1].v;
}
by _determination_ @ 2024-07-15 14:35:44
@fengzhaoyu 怎么会是+=呢?
by 添哥 @ 2024-07-15 14:36:01
加等于不就把原来的值也算进去了
by fengzhaoyu @ 2024-07-15 14:45:33
哦,想通了,谢谢dalao @Joker_Fish @添哥
by danlao @ 2024-07-15 14:46:07
@fengzhaoyu 线段树中父节点的值是由两个字节点相加得到的。打你改变子节点的值时,父节点的值不会一起改变,如果是 +=
,那么父节点的值将会比正确的值大,所以应该用 =
。
by danlao @ 2024-07-15 14:47:11
@danlao
打你改变子节点的值时
当你改变子节点的值时
by fengzhaoyu @ 2024-07-15 14:51:34
@danlao 懂了