毒瘤梅开二度html
若是你还不了解什么是线段树 或者你只是简单了解可是并不知道工做原理以及基本操做 请你不要观看这篇博客(若是执意观看可能会引发您的部分不适)
在看这篇博客以前能够先看一下 线段树(毒瘤)总结code
咱们在前面已经介绍过线段树基本操做(单点修改 单点查询 区间修改 区间求值)
可是都是简单的加减运算 若是咱们须要乘法运算呢?htm
//在作乘法线段树的时候必定要注意取模 通常状况下都会炸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; }