求助,全WA,样例过了!!!

P3373 【模板】线段树 2

很明显你就是没学明白线段树,乘法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


|