线段树板子求调

P3373 【模板】线段树 2

~~30分我老有经验了~~
by Infinity_Fantasy @ 2023-10-10 20:55:23


@[vicky128](/user/177000) 你 不 会 同 余 系 吗 快去学 :D 我的同余系实现: ```cpp const I mod=571373,N=1e5+10; I n,q,tn; struct mo{I x;mo(I a=0){x=a;if(x<0)x+=mod;if(x>=mod)x-=mod;} mo operator +(const mo&a)const{return mo(x+a.x);} mo operator -(const mo&a)const{return mo(x-a.x);} mo operator *(const mo&a)const{return mo(1ll*x*a.x%mod);} V operator *=(const mo&a){x=1ll*x*a.x%mod;} V operator +=(const mo&a){x+=a.x;x%=mod;} }a[N],su[N]; ```
by SMT0x400 @ 2023-10-10 20:56:05


[评测记录(开ull,空间开四倍)](https://www.luogu.com.cn/record/128633936) [评测记录(开ull,空间开两倍)](https://www.luogu.com.cn/record/128633235) [评测记录(开LL,空间开两倍)](https://www.luogu.com.cn/record/128628671)
by vicky128 @ 2023-10-10 20:56:10


@[vicky128](/user/177000) 30分是因为你在push的时候加法的懒标记也要进行乘法操作
by Infinity_Fantasy @ 2023-10-10 20:56:25


@[SMT0x400](/user/121995) 看不懂你的代码%%%%%
by vicky128 @ 2023-10-10 20:56:46


@[vicky128](/user/177000) 就是你add也要乘mul
by Infinity_Fantasy @ 2023-10-10 20:57:24


@[AK_CCF](/user/571265) 乘了,在这一段里面 ```cpp void push(int no,int l,int r){ int ad=tr[no].add,mu=tr[no].mul,lc=tr[no].l,rc=tr[no].r,mi=l+r>>1; tr[no].add=0,tr[no].mul=1; if(mu>1){ ...... tr[lc].add*=mu,tr[lc].add%=mod; ...... tr[rc].add*=mu,tr[rc].add%=mod; ...... } if(ad) ...... } ```
by vicky128 @ 2023-10-10 20:58:12


@[vicky128](/user/177000) 这是我写的代码 ``` tree[p<<1].addlazy=(tree[p<<1].addlazy*tree[p].mulazy%m+tree[p].addlazy)%m, tree[p<<1|1].addlazy=(tree[p<<1|1].addlazy*tree[p].mulazy%m+tree[p].addlazy)%m; ```
by Infinity_Fantasy @ 2023-10-10 20:59:10


@[AK_CCF](/user/571265) 我个人觉得我push内部的加法实现出来和您的是一样的QAQ
by vicky128 @ 2023-10-10 21:00:14


@[vicky128](/user/177000) 其实不用写 ``` if(mu>1) 和 if(ad) ``` 因为你初始化的乘法标记是1,加法是0所以不用判直接操作即使没有也不影响答案
by Infinity_Fantasy @ 2023-10-10 21:00:54


| 下一页