前缀和
前缀和,顾名思义就是数组的前n项和
对于数列
a
1
,
a
2
,
a
3
,
.
.
.
,
a
n
a_1,a_2,a_3,...,a_n
a1,a2,a3,...,an
前缀和
s
1
=
a
1
s_1=a_1
s1=a1
s
2
=
a
1
+
a
2
s_2=a_1+a_2
s2=a1+a2
s
3
=
a
1
+
a
2
+
a
3
s_3=a_1+a_2+a_3
s3=a1+a2+a3
.
.
.
...
...
s
n
=
a
1
+
a
2
+
.
.
.
+
a
n
s_n=a_1+a_2+...+a_n
sn=a1+a2+...+an
差分数组即为
[ a 1 , a 2 − a 1 , a 3 − a 2 , . . . , a n − a n − 1 a_1,a_2-a_1,a_3-a_2,...,a_n-a_{n-1} a1,a2−a1,a3−a2,...,an−an−1]
作用以及相关应用
假设原数组 [ a 1 , a 2 , a 3 , a 4 , a 5 a_1,a_2,a_3,a_4,a_5 a1,a2,a3,a4,a5]
差分数组[ a 1 , a 2 − a 1 , a 3 − a 2 , a 4 − a 3 , a 5 − a 4 a_1,a_2-a_1,a_3-a_2,a_4-a_3,a_5-a_{4} a1,a2−a1,a3−a2,a4−a3,a5−a4]
差分的前缀和为[ a 1 , a 2 − a 1 + a 1 , a 3 − a 2 + ( a 2 − a 1 ) + a 1 , a 4 − a 3 + ( a 3 − a 2 + ( a 2 − a 1 ) + a 1 ) , a 5 − a 4 + ( a 4 − a 3 + ( a 3 − a 2 + ( a 2 − a 1 ) + a 1 ) ) a_1,a_2-a_1+a_1,a_3-a_2+(a_2-a_1)+a_1,a_4-a_3+(a_3-a_2+(a_2-a_1)+a_1),a_5-a_4+(a_4-a_3+(a_3-a_2+(a_2-a_1)+a_1)) a1,a2−a1+a1,a3−a2+(a2−a1)+a1,a4−a3+(a3−a2+(a2−a1)+a1),a5−a4+(a4−a3+(a3−a2+(a2−a1)+a1))]
=[a_1,a_2,a_3,a_4,a_5]
性质1:
证明:
比如给
a
2
,
a
3
,
a
4
a_2,a_3,a_4
a2,a3,a4添加一个增量2,
那么原数组为:
[
a
1
,
a
2
+
2
,
a
3
+
2
,
a
4
+
2
,
a
5
a_1,a_2+2,a_3+2,a_4+2,a_5
a1,a2+2,a3+2,a4+2,a5]
对应的差分数组就变为:
[ a 1 , a 2 − a 1 + 2 , a 3 + 2 − ( a 2 + 2 ) , a 4 − a 3 , a 5 − a 4 − 2 a_1,a_2-a_1+2,a_3+2-(a_2+2),a_4-a_3,a_5-a_4-2 a1,a2−a1+2,a3+2−(a2+2),a4−a3,a5−a4−2]
= [ a 1 , a 2 − a 1 + 2 , a 3 − a 2 , a 4 − a 3 , a 5 − a 4 − 2 a_1,a_2-a_1+2,a_3-a_2,a_4-a_3,a_5-a_4-2 a1,a2−a1+2,a3−a2,a4−a3,a5−a4−2]
利用这个性质可以解决一些区间的问题