众所周知,在往区间的每一个数都加上一个相同的数k,进行n次后会得到一个新的数列,如果每次加都循环区间挨个数加上k,这样时间复杂度无疑是O(n^2),很高。这时可以采用一阶差分就可解决,这里默认会一阶差分,所以就不多说了嘿嘿。
那如果是加上不同的数呢,比如说往区间[l,r]的l点加上数a,往l+1点加上数a+d,……。加的数形成等差数列,这该怎么办呢?这时可以用二阶差分。因为你想,对加上对应等差数列的不同的数进行一阶差分,是不是点的值都变成公差了,公差是不是都是一样的,那这时候再进行一次差分,就可以做到只改变区间某点的数据,实现区间的加减值。
如下图: