一个问题

P3372 【模板】线段树 1

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 打你改变子节点的值时 \\\Downarrow\\ 当你改变子节点的值时


by fengzhaoyu @ 2024-07-15 14:51:34

@danlao 懂了


|