问题引入:
第i个位置上的数字变成了1,求整个数组求k次前缀和之后,j位置上的前缀和
问题推导
我们先把可能发生了什么列出来
假设我们在位置i添加了w,现在要查询j位置,现在一次前缀和操作都没有进行,矩阵的第一列代表i位置,最后一列代表j位置
$$
$$
一开始肯定什么都没有发生,我们现在直接让他加3次
其实我们直接把w都去掉,发现只是一个系数矩阵,好像还有点对称???
我们接着可以发现,这个矩阵,就标记为A,满足一个性质
可以理解为一个矩阵的上的系数等于左边加上头上的系数。这个很好理解嘛,上边的数相当于这个位置以前的值,左边的数相当于是新的前缀和。
但是,但是,但是。我们是不是可以将这个看成一个DP数组呢?看成dp数组的话,从递推式就是从矩阵左上角开始,只能朝右或者朝下走,有多少种走法。正好对应了这个式子。
这个路径问题,我们就可以用组合数来求解了,我们就将目标转移到矩阵的右下角
Ak,j−i
A
k
,
j
−
i
,那么走到这里肯定走了
k+j−i
k
+
j
−
i
步,我们就从这里面选出k步朝下走,剩下的就不用写了,也就是说这个答案等于:
Oh yeah~问题解决了,只要把w乘上去,问题就变成了组合数问题了。
如果查询的j在i前面?当然对答案没有影响了。
之后更新那两道题……