解题思路
题目解析如图
思路 算出每个位置的到第一个位置的总和
比如 第一个位置 1 总和 1
第二个位置 2 总和 3
第三个位置 4 总和 7
要算 2到3 位置的前缀和 用3位置的总和减去1位置的总和即可
还要处理一个边界情况 如果1到1位置的前缀和那么就是 用1位置的前缀和 减去0位置的前缀和
我们创建的数组应该从1位置开始
代码如下
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//读入数据
int n,q;
cin>> n >> q;
vector<int> arr(n+1);
for(int i=1;i<arr.size();i++)
{
cin>>arr[i];
}
vector<long long> dp(n+1);
for(int i=1;i<arr.size();i++)
{
dp[i]=dp[i-1]+arr[i];
}
int left,right;
while(q--)
{
cin>>left >>right;
cout<<dp[right]-dp[left-1]<<endl;
}
return 0;
}