题目情境#
题目链接:https://www.luogu.com.cn/problem/P8218 ↗
题目描述
给定 个正整数组成的数列 和 个区间 ,分别求这 个区间的区间和。
对于所有测试数据,
输入格式
第一行,为一个正整数 。
第二行,为 个正整数
第三行,为一个正整数 。
接下来 行,每行为两个正整数 ,满足
输出格式
共 行。
第 行为第 组答案的询问。
输入输出样例
输入 #1
4
4 3 2 1
2
1 4
2 3plaintext输出 #1
10
5plaintext对于 的数据:,
算法解析#
把每项的和加起来,然后利用相减的方式得出和的值。适用于静态的区间求和,应用面非常广泛。

时间复杂度
Python代码实现#
n = int(input())
a = list(map(int, input().split()))
s = [0] * (n + 1)
for i in range(1, n + 1):
s[i] = s[i - 1] + a[i - 1]
m = int(input())
for i in range(m):
l, r = map(int, input().split())
print(s[r] - s[l - 1])pythonC++代码实现#
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
int a[100005],s[100005];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
s[i]=s[i-1]+a[i];
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
int l,r; scanf("%d%d",&l,&r);
printf("%d\n",s[r]-s[l-1]);
}
}c