【深进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$ ,满足 $1\le l_i\le r_i\le 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,m\le 1000$ ;
对于 100% 的数据:$1 \leq n,m\le 10^5$,$1 \leq a_i\le 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;
}
标签:10,le,正整数,int,B3612,深进,样例,long,区间
From: https://www.cnblogs.com/tflsghh/p/17134658.html