- zouyc 的博客
前缀和
- @ 2025-9-18 21:07:49
前缀和定义



前缀和用途

练习题1:一维前缀和练习

题解:
/*
p_prefixsum_1.cpp v1.0.0
一维前缀和算法 scanf,print版
in
5 3
2 1 3 6 4
1 2
1 3
2 4
out
3
6
10
*/
#include <iostream>
using namespace std;
const int N=100010;
int a[N],s[N]; //默认初始化为0
int main() {
int n,m; //n个整数,m个询问
cin>>n>>m;
for (int i=1;i<=n;i++) //原数组,从1开始
cin>>a[i];
for (int i=1;i<=n;i++)
s[i]=s[i-1]+a[i]; //公式1
while (m--)
{
int l, r;
cin>>l>>r;
cout<<(s[r]- s[l-1])<<endl; //公式2
}
return 0;
}
/*
p_prefixsum_1.cpp v1.0.0
一维前缀和算法 scanf,print版
in
5 3
2 1 3 6 4
1 2
1 3
2 4
out
3
6
10
#include <cstdio>
const int N=100010;
int a[N],s[N]; //默认初始化为0
int main() {
int n,m; //n个整数,m个询问
scanf("%d%d", &n, &m);
for (int i=1;i<=n;i++) {//原数组,从1开始
scanf("%d",&a[i]);
s[i]=s[i-1]+a[i]; //前缀和数组,从1开始 公式1
}
while (m--)
{
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", s[r]- s[l-1]); //公式2
}
return 0;
}
*/
/*
暴力枚举法 80分,20分TLE
复杂度O(m*n),当m、n大时,必然超时
因为存在重复计算,比如1 ~ K
#include <iostream>
using namespace std;
const int N=1e5+10;
int a[N];
int main()
{
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++) cin>>a[i];
while (m--)
{
int l,r;
cin>>l>>r;
int sum=0;
for (int i=l;i<=r;i++)
sum+=a[i];
cout<<sum<<endl;
}
}
*/