题意: 给n个位置,q次操作,每次对操作可以改变i位置的数,定义f(i,j)=ai∗a(i+1)∗...∗aj.f(i,j) = ai * a(i+1) * ... * aj.f(i,j)=ai∗a(i+1)∗...∗aj. 求整个区间中所有子区间乘积的和对10007取模 题解: 主要难点是找到求所有子区间乘积和的规律,然后用线段树维护。通过找规律,可以发现,所求所有子区间的和为该节点左儿子的和+该节点右儿子的和+左儿子的后缀乘积和*右儿子的前缀乘积和。 开一个结构体,每个节点带四个信息: struct node { int mul; 区间乘积 int qs; 前缀和 int hs; 后缀和 int