都是一种预处理!!!!!!!!
1.差分数组
从侧面来表示给定某一数组的变化,
一般用来对数组进行区间修改的操作
还是上面那个表里的栗子,我们需要进行以下操作:
1、将区间【1,4】的数值全部加上3
2、将区间【3,5】的数值全部减去5
很简单对吧,你可以进行枚举。
但是如果给你的数据量是1e5,
操作量1e5(10的5次方),
限时1000ms你暴力枚举能莽的过去吗?
T到你怀疑人生直接。
这时我们就需要使用到差分数组了。
d[i] = a[i] - a[i-1];
注意 只能是区间元素同时增加或减少相同的数的情况才能用
可以快速得到修改区间后的某个数字。
2.前缀和数组
前缀和是一种预处理,可以降低时间复杂度,
可以在后面的计算中可以直接应用前面已经算出的结果.
sum[i] = a[i] + sum[i-1];
这个主要是应用于在O(1)时间内求一个序列和。
如给一个序列s,求s[i]+s[i+1]+s[i+2]+…s[n]。
算法十分简单,用数组sum[i]记录前n项序列s[i]的和
a[2] + a[3] +a[4] = s[4] - s[2-1]