1.設定兩個標記add和mul;初值add=0,mul=1;
2.增加操作:tree[rt].sum[0]+=(r-l+1)*add
下面分析sum[1](二次方增加的原理):
由平方公式得:(a+b)^2=a^2+2*a*b+b^2;tree[rt].sum[1]+=add*add*(r-l+1)+2*add*tree[rt].sum[0];
再分析sum[2](三次方增加的原理):
(a+b)^3=a^3+3*a^2*b+3*a*b^2+b^3
因此:tree[rt].sum[2]+=3*add*tree[rt].sum[1]+3*add*add*tree[rt].sum[0]+(r-l+1)*add*add*add;
3.乘法操作:
tree[rt].sum[0]*=mul
tree[rt].sum[1]*=mul*mul
tree[rt].sum[2]*=mul*mul*mul
4.標記的更改:
(a*d+p)*d等價於d*=d;p*=d
5.對於(k*a+b);
一次方:k*a+b=k*a+(r-l+1)*b;
二次方:(k*a+b)^2=k*k*a*a+2*k*a*b+(r-l+1)b*b;
三次方:(k*a+b)^3=k*k*k*a*a*a+3*k*k*a*a*b+3*k*a*b*b+(r-l+1)b*b*b
hdu4578 (多標記線段樹)
對於乙個區間有4個操作 1.將a b都加上c 2.將a b都乘上c 3.將a b都變成c 4.查詢a b的每個數的p次方的和。p 1,2,3 平方和這樣來推 a c 2 a 2 2ac c 2 即 sum2 rt sum2 rt 2 sum1 rt c r l 1 c c 立方和這樣推 a c 3 ...
HDU 4578 線段樹各種區間操作
原題鏈結 題意 初始乙個長度為n的陣列全為0,有m個操作,輸入op,l,r,x。op 1時,把 l,r 中的所有數加上x op 2時,把 l,r 中的所有樹乘上x op 3時,把 l,r 中的所有數全置為x op 4時,輸出 l,r 中所有數的 x 方的和 思路 令 x a x b 即對乙個x,令他...
線段樹懶標記好題 HDU4578
1 1 x y c 代表 把區間 x,y 上的值全部加c 2 2 x y c 代表 把區間 x,y 上的值全部乘以c 3 3 x y c 代表 把區間 x,y 上的值全部賦值為c 4 4 x y p 代表 求區間 x,y 上值的p次方和1 p 3 維護sum1,sum2,sum3分別為一次方 二次方...