定义: 定义一个数组S,S[i]表示a[1]到a[i]的和那么求[l,r]区间的和,求出S[r]-S[l]即可数组S存储的就是前缀和 实现: #include<iostream> using namespace std; int a[1000001]; int S[1000001]; int main() { int i, j, k; int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; S[i] = S[i - 1] + a[i]; } return 0; } 问题1:求区间内数字的和 给出了一个数组(数组长度<100000),再给出了一个区间[l,r],求区间的和每个数字大小不超过1000 #include<iostream> using namespace std; int a[1000001]; int S[1000001]; int main() { int i, j, k; int n, l, r; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; S[i] = S[i - 1] + a[i]; } cin >> l >> r; cout << S[r] - S[l - 1]; return 0; } 问题2:求区间和最大值 ans=max(S[j]-min(S[i]),j=1…n,i=1…j-1)以j作为终点的区间,答案是什么?S[j]-S[i]尽可能地大,现在j是确定的。让S[i]尽可能地小,那么就是min(S[i])