前缀和大大缩短运算所需时间,但要牺牲一大部分空间。
例题:B3612 【深进1.例1】求区间和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
在本题中有一个新思路
原数组a:i1,i2,i3,i4,i5……
前缀和数组s:i1,i1+i2,(i1+i2)+i3,……
模拟代码如下:
for(int i=1; i<=n; i++) s[i]=s[i-1]+a[i];
具体使用:
如求a[f]+a[f+1]+……+a[r]的和时
只需用s[r]-s[f-1]即可
题解代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100010];
long long ans,s[100010];
int l,r;
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
cin>>a[i];
cin>>m;
for(int i=1; i<=n; i++)
s[i]=s[i-1]+a[i];
for(int i=1; i<=m; i++)
{
cin>>l>>r;
ans=s[r]-s[l-1];
cout<<ans<<endl;
ans=0;
}
}
标签:前缀,int,i2,long,i1,ans
From: https://www.cnblogs.com/Zelda-anjisuan/p/17155485.html