题目:
算法原理:
前缀和算法能快速求出某一个区间内所有元素的和
1 预处理出来一个前缀和数组dp
dp[i] = dp[i-1]+v[i] (v数组由输入的数字组成),即区间[1,i]的所有元素的和=区间[1,i-1]所有元素的和+v数组中i下标的元素
2 使用前缀和数组
求[l,r]这段连续区间的和,即dp[r] -dp[l-1]
代码实现:
int main()
{
//1 读入数据
int n = 0;
int q = 0;
cin >> n >> q;
vector<int> v(n + 1);
for (int i = 1; i <= n; i++)
{
cin >> v[i];
}
//2 预处理出来一个前缀和数组
vector<long long> dp(n + 1);//防止溢出
for (int i = 1; i <= n; i++)
{
dp[i] = dp[i - 1] + v[i];
}
// 3 使用前缀和数组
int l = 0;
int r = 0;
while (q--)
{
cin >> l >> r;
cout << dp[r] - dp[l - 1] << endl;
}
return 0;
}