题目链接:58.区间和
思路
前缀和
假设:nums是题目给出的数组,prefix为数组nums的前缀和数组
prefix[i] = prefix[0] + prefix[1] + … + prefix[i]
因此下标[a,b]范围内元素的和 = prefix[b] - prefix[a-1];
特别的,a = 0 时,该区间的和为 prefix[b] - 0 ,即prefix[b]
代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
vector<int> nums(n, 0);
vector<int> prefix(n, 0);
int prefixsum = 0;
for (int i = 0; i < n; ++i) {
cin >> nums[i];
prefixsum += nums[i];
prefix[i] = prefixsum;
}
int a, b;
while (cin >> a >> b) {
if (!a) cout << prefix[b] << endl;
else cout << prefix[b]-prefix[a-1] << endl;
}
return 0;
}