毒瘤梅開二度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; }