HDU4578(多种求值更新操作)

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值