AcWing算法-前缀和
文章目录
前言
一、什么是前缀和?
需要注意的是下标要从1开始,之前我们的数列数组大多都是从下标0开始,但是这里需要从1开始,理由下面会阐述。
二、三个关键问题
1.如何求前缀和
如果这样直接求前缀和的话时间复杂度是O(n)。
2.前缀和算法的作用
快速计算一段区间上的和,比如 [ l,r ].
我们先写出公式:
现在证明一下:
我们发现两式相减就是从[l,r]上的和。
3.解释一下下标问题
上面就提到前缀和算法的下标应该注意从1开始,在这里我说明一下这样处理的原因:
原因就是下标从1开始,这样S0=0,目的是为了处理边界。这句话不太好理解,我来举个例子帮助大家理解:
三、一维前缀和模板
S[i] = a[1] + a[2] + ... a[i]
a[l] + ... + a[r] = S[r] - S[l - 1]
一维的板子很好记,就是要注意区间左边如果是闭区间,就要左端点-1,即 S[l - 1];
四、一维前缀和实战
代码如下:
#include <iostream>
#include