### 思路
为了快速计算区间和,我们可以使用前缀和数组。前缀和数组`sum`的第`i`个元素表示从第1个元素到第`i`个元素的和。这样,区间[L, R]的和可以通过`sum[R] - sum[L-1]`快速得到。
具体步骤如下:
1. 读取输入的整数`n`。
2. 读取`n`个整数并构建前缀和数组`sum`。
3. 读取输入的整数`m`。
4. 对于每个查询,读取区间的左右端点`L`和`R`,并通过`sum[R] - sum[L-1]`计算区间和。
5. 输出每个查询的结果。
### 伪代码
```
function main():
read n
read array a of size n
initialize sum array of size n+1 to 0
for i from 1 to n:
sum[i] = sum[i-1] + a[i-1]
read m
for i from 1 to m:
read L, R
result = sum[R] - sum[L-1]
print result
```
### C++代码
#include <iostream>
#include <vector>
#include <cstdio>
int main() {
std::ios::sync_with_stdio(false);
int n;
std::cin >> n;
std::vector<long long> a(n);
for (int i = 0; i < n; ++i) {
std::cin >> a[i];
}
std::vector<long long> sum(n + 1, 0);
for (int i = 1; i <= n; ++i) {
sum[i] = sum[i - 1] + a[i - 1];
}
int m;
std::cin >> m;
for (int i = 0; i < m; ++i) {
int L, R;
std::cin >> L >> R;
std::cout << sum[R] - sum[L - 1] << '\n';
}
return 0;
}
### 总结
通过使用前缀和数组,我们可以在O(1)的时间内计算任意区间的和,从而将整体算法的时间复杂度降低到O(n + m)。这种方法利用了前缀和数组的特性,使得查询操作非常高效。