B3612 【深进1.例1】求区间和

【深进1.例1】求区间和

题目描述

给定 $n$ 个正整数组成的数列 $a_1, a_2, cdots, a_n$ 和 $m$ 个区间 $[l_i,r_i]$,分别求这 $m$ 个区间的区间和。

输入格式

共 $n+m+2$ 行。

第一行,为一个正整数 $n$ 。

第二行,为 $n$ 个正整数 $a_1,a_2, cdots ,a_n$

第三行,为一个正整数 $m$ 。

第 $4$ 到第 $n+m+2$ 行,每行为两个正整数 $l_i,r_i$ ,满足 $1le l_ile r_ile n$

输出格式

共 $m$ 行。

第 $i$ 行为第 $i$ 组答案的询问。

样例 #1

样例输入 #1

4
4 3 2 1
2
1 4
2 3

样例输出 #1

10
5

提示

样例解释:第 1 到第 4 个数加起来和为 10。第 2 个数到第 3 个数加起来和为 5。

对于 50% 的数据:$n,mle 1000$ ;

对于 100% 的数据:$1 leq n,mle 10^5$,$1 leq a_ile 10^4$。


对于 50% 的数据,双重循环暴力枚举。

#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[100010];
int l,r;
long long ans;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	cin>>m;
	for(int i=1;i<=m;i++){
		l=0;
		r=0;
		ans=0;
		cin>>l>>r;
		for(int j=l;j<=r;j++)
			ans+=a[j];
		cout<<ans<<endl;
	}
	return 0; 
} 

对于100%的数据:使用前缀和求解

#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[100010],s[100010];
int l,r;
long long ans;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		s[i]=s[i-1]+a[i];
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		ans=0;
		cin>>l>>r;
		ans=s[r]-s[l-1];
		cout<<ans<<endl;
	}
	return 0; 
} 
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » B3612 求区间和