你得用多点修改,打懒标记。
by Lizichen_licis @ 2024-02-24 10:04:05
具体可以参考一下我的:
```cpp
void maketag(int u,int len,long long val)
{
lzy[u]+=val;
w[u]+=len*val;
}
void pushdown(int u,int L,int R)
{
int mid=(L+R)/2;
maketag(2*u,mid-L+1,lzy[u]);
maketag(2*u+1,R-mid,lzy[u]);
lzy[u]=0;
}
void LRupdate(int u,int L,int R,int l,int r,long long val)
{
if(inRange(L,R,l,r)) maketag(u,R-L+1,val);
else if(!outofRange(L,R,l,r))
{
int mid=(L+R)/2;
pushdown(u,L,R);
LRupdate(2*u,L,mid,l,r,val);
LRupdate(2*u+1,mid+1,R,l,r,val);
pushup(u);
}
}
```
by Lizichen_licis @ 2024-02-24 10:04:47
其他函数用你自己的就行了
by Lizichen_licis @ 2024-02-24 10:05:50
Thanks.
by Dreamer_OI @ 2024-02-25 10:16:34