发现函数嵌套后关于 x 还是一个函数,而且是一次函数。这个自己推一下易证。
于是就可以线段树维护单点修改和区间查询了。
现在问题在于区间加 b,这个不好 pushdown
。
考虑区间加后对合并后函数的变化。
k 值显然不变,b 值可以考虑每个函数被加 x 的贡献,来尝试维护 b 的变化量。
bl 导致结果的变化量为 x×kl+1×kl+2...
bl+1 导致结果的变化量为 x×kl+2×kl+3...
可以写出最终的式子:
x×i=l∑r−1j=i+1∏rkj+x
(注意 +x 是前面式子后单独的,不是 kj+x)
x 修改时给定,现在只要 pushup
时能维护 i=l∑r−1j=i+1∏rkj+1 就做完了。
右儿子部分,直接加上就完事,左儿子部分还要多乘一个 i=mid+1∏rki,这个也可以 pushup
时维护,直接左儿子乘右儿子。