简单的前缀和运算

给出一个正整数n,输入n个数,并求这n个数的某个区间的和。

首先要定义一个数组,这个数组的大小要比n要大,否则会出现越界的情况,用这个数组来装这n个数。先给出代码,随后附上解析。

#include<bits/stdc++.h> 
using namespace std;
int a[100005];
int sum[100005];//将数组放在函数外面就会将数组里的每个值都初始化为0 
int main(){
    int N,M;
	int L,R;
	int t;
	cin>>N>>M; 
    for(int i=1;i<=N;i++){ //i从1开始,即从数组的第二位开始赋值,数组的第一位为0 
		cin>>a[i];
	}
	sum[0]=a[0];
	for(int j=1;j<=N;j++){ //j要从1开始,sum[j-1]才有正确的值 ,从0开始j-1数组会越界 
		sum[j]=sum[j-1]+a[j];
		}
		for(t=0;t<M;t++){
			cin>>L>>R;
			printf("%d\n",sum[R]-sum[L-1]);
	}  
	return 0;
}

对于这个代码,N是指数的个数,M是求这N个数的区间和的次数(即求M个区间的和),L,R是指区间的起始。

假设N=5,M=2,输入1 2 3 4 5,再求两次区间的和,第一个区间L=1,R=3;第二个区间的和L=2,R=4。则最后会输出6和9.

解析:

a[1]=1,a[2]=2,a[3]=3;a[4]=4,a[5]=5

sum[o]=a[o]

sum[1]=a[1]

sum[2]=a[1]+a[2]=sum[1]+a[2]

sum[3]=a[1]+a[2]+a[3]=sum[2]+a[3]

sum[4]=a[1]+a[2]+a[3]+a[4]=sum[3]+a[4]

sum[5]+a[1]+a[2]+a[3]+a[4]+a[5]=sum[4]+a[5]

......

所以前缀和:sum[i]=sum[i-1]+a[i]

求区间【2,4】的和:a[2]+a[3]+a[4]=sum[4]-sum[1]

所以求区间【L,R】的和:sum[L,R]=sum[R]-sum[L-1]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值