- 题解
前缀和数组使用
- @ 2025-3-22 17:54:44
前缀和数组
前缀和数组是一种用于快速计算数组中连续子数组和的数据结构。
给定一个数组 ,
前缀和数组 定义为 。
我们可以通过 快速计算出任意子数组 的和,即 (注意当 时,)。
示例
给定数组 ,我们首先计算其前缀和数组 :
$S[4] = A[1] + A[2] + A[3] + A[4] = 3 + 1 + 4 + 1 = 9$
$S[5] = A[1] + A[2] + A[3] + A[4] + A[5] = 3 + 1 + 4 + 1 + 5 = 14$
$S[6] = A[1] + A[2] + A[3] + A[4] + A[5] + A[6] = 3 + 1 + 4 + 1 + 5 + 9 = 23$
$S[7] = A[1] + A[2] + A[3] + A[4] + A[5] + A[6] + A[7] = 3 + 1 + 4 + 1 + 5 + 9 + 2 = 25$
$S[8] = A[1] + A[2] + A[3] + A[4] + A[5] + A[6] + A[7] + A[8] = 3 + 1 + 4 + 1 + 5 + 9 + 2 + 6 = 31$
所以,前缀和数组 为 (注意 )。
现在,我们可以通过前缀和数组 快速计算任意子数组的和。
例如:
- 计算子数组 的和:
$A[3] + A[4] + A[5] + A[6] = S[6] - S[2] = 23 - 4 = 19$
因此,子数组 的和为 19。
- 计算子数组 的和
因此,子数组 的和为
结论 计算之前所有的元素和
初始化
int A[110], S[110];
int main(){
int n;
cin>>n;
for(int i=1; i<=n; i++){
cin>>a[i];
S[i]=S[i-1]+A[i]; //初始化前缀和数组
}
int l, r;
cin>>l>>r;
cout<<S[r]-S[l-1]<<endl; //求A[l]+...+A[r]
}
应用
前缀和数组在处理数组和的查询问题时非常有用,特别是在多次查询的情况下,可以显著提高效率。
1 条评论
-
zzm1118 LV 1 @ 2025-3-30 18:13:59
的风格大法官
- 1