题目描述
给定 n 个正整数组成的数列 a1, a2, ⋯,an 和 m 个区间 [li,ri],分别求这 m 个区间的区间和。
对于所有测试数据,n, m ≤ 10^5, ai ≤ 10^4
输入格式
第一行,为一个正整数 n 。
第二行,为 n 个正整数 a1, a2, ⋯, an
第三行,为一个正整数 m 。
接下来 m 行,每行为两个正整数 li,ri ,满足 1 ≤ li ≤ ri ≤ n
输出格式
共 m 行。
第 i 行为第 i 组答案的询问。
输入输出样例
输入 #1
4 4 3 2 1 2 1 4 2 3
输出 #1
10 5
说明/提示
样例解释:第 1 到第 4 个数加起来和为 10。第 2 个数到第 3 个数加起来和为 5。
对于 50% 的数据:n, m ≤ 1000;
对于 100% 的数据:1 ≤ n, m ≤ 10^5,1 ≤ ai ≤ 10^4
思路图解为:
代码实现:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000001;
int a[N], s[N], b[N];
int main(){
int n;
cin >> n;
// 先统计前i项和
for (int i = 1; i <= n; i++){
cin >> a[i];
s[i] = s[i - 1] + a[i];
}
int m;
cin >> m;
// 利用前i项和进行求解区间值 并存储起来其答案
for (int i = 1; i <= m; i++){
int l,r;
cin >> l >> r;
b[i] = s[r] - s[l - 1];
}
// 输出数据
for (int i = 1; i <= m; i++) cout << b[i] << endl;
return 0;
}