看看你维护的是max但是下传的时候有没有当成加法在更新value
例如
void push_up(int p){ tree[p] = max(tree[p2],tree[p3]) } void add_node(int l,int r,int v,int li,int re,int p){ if(l<=li && re<=r){ // 看看你维护的是什么 // tree[p] += v*(re-li+1); // 正确: tree[p]+=v; } }