题解/算法 {F - Two Sequence Queries}
@LINK: https://atcoder.jp/contests/abc357/tasks/abc357_f
;
(Al + da)*(Bl + db) + ... + (Ar + da)*(Br + db)
, 其中da,db
是懒标记;
ANS
记录Al*Bl + ... + Ar*Br
, 于是原式等于 ANS + da * SumB + db * SumA + da*db * (r-l+1)
;
void Modify_ByLazy( Lazy_ const& _lazy){
int Len = (Interval.second - Interval.first + 1);
ANS += _lazy.A_Add * B_Sum;
ANS += _lazy.B_Add * A_Sum;
ANS += (_lazy.A_Add * _lazy.B_Add * Len);
A_Sum += _lazy.A_Add * Len;
B_Sum += _lazy.B_Add * Len;
}
一定要注意, A_Sum, B_Sum
的更新 要放到ANS
更新的 下面, 否则就错了!!! 你更新ANS
里面用到的A_sum, B_sum
是原式里的值 不能受到Add
懒标记的影响;