标签:原理 直接 求值 加法 解释 查询 html col blog
毒瘤梅开二度
如果你还不了解什么是线段树 或者你只是简单了解但是并不知道工作原理以及基本操作 请你不要观看这篇博客(如果执意观看可能会引起您的部分不适)
在看这篇博客之前可以先看一下 线段树(毒瘤)总结
我们在前面已经介绍过线段树基本操作(单点修改 单点查询 区间修改 区间求值)
但是都是简单的加减运算 如果我们需要乘法运算呢?
//在做乘法线段树的时候一定要注意取模 一般情况下都会炸int
(如果感觉时间会被卡可以将*2的操作改为<<1 , +1改为|1)
void pushdown(ll p){
t[p*2].sum = (ll)(t[p].laz * t[p*2].sum + ((t[p*2].r - t[p*2].l + 1)*t[p].add)%mod)%mod;
t[p*2+1].sum = (ll)(t[p].laz * t[p*2+1].sum + (t[p].add * (t[p*2+1].r - t[p*2 + 1].l + 1))%mod)%mod;
t[p*2].laz = (ll)(t[p*2].laz * t[p].laz)%mod;
t[p*2+1].laz = (ll)(t[p*2+1].laz * t[p].laz)%mod;
t[p*2].add = (ll)(t[p*2].add*t[p].laz + t[p].add)%mod;
t[p*2+1].add = (ll)(t[p*2+1].add * t[p].laz + t[p].add) % mod;
t[p].laz = 1,t[p].add = 0;
}
标签:原理 直接 求值 加法 解释 查询 html col blog
原文地址:https://www.cnblogs.com/2004-08-20/p/13228664.html