很明显你就是没学明白线段树,乘法tag和加法tag是要一起下压的,怎么可能是分开下压的,参考一下吧 ~~以前写的代码真丑~~ :
```
void addtag(int p,int pl,int pr,ll d){
add[p]+=d;
tree[p]+=(pr-pl+1)*d;
c(add[p]);
c(tree[p]);
}
void multag(int p,ll d){
mul[p]*=d;
tree[p]*=d;
add[p]*=d;
c(mul[p]);
c(tree[p]);
c(add[p]);
}
void push_down(int p,int pl,int pr){
if(mul[p]!=1){
multag(ls(p),mul[p]);
multag(rs(p),mul[p]);
mul[p]=1;
}
if(add[p]!=0){
int mid=(pl+pr)>>1;
addtag(ls(p),pl,mid,add[p]);
addtag(rs(p),mid+1,pr,add[p]);
add[p]=0;
}
}
```
by _Yonder_ @ 2024-04-20 23:54:10
@[_Yonder_](/user/696078) #define c(x) x%=mod
by _Yonder_ @ 2024-04-20 23:54:59
@[_Yonder_](/user/696078) 为什么是分开下压啊,请大佬详解
by yangjingyao2011 @ 2024-04-21 12:24:52
@[yangjingyao2011](/user/1192073) 为什么不是分开下压
by yangjingyao2011 @ 2024-04-21 12:25:35
@[yangjingyao2011](/user/1192073) 因为那些tag比你当前的tag更早就出现了,所以一定要先全部提前处理
by _Yonder_ @ 2024-04-21 12:46:28
@[_Yonder_](/user/696078) 不然的话就相当于你打乱了操作的顺序
by _Yonder_ @ 2024-04-21 12:47:18
@[yangjingyao2011](/user/1192073) 你的代码里好像没有mul tag,这个是不能少的,mul tag初始化要为1
by _Yonder_ @ 2024-04-21 12:53:19