0
点赞
收藏
分享

微信扫一扫

毕业设计 | ESP32-Album 开源 AIoT 智能云相框,支持 Wi-Fi 无线图传,平替小米电子相册...

### 思路

为了快速计算区间和,我们可以使用前缀和数组。前缀和数组`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)。这种方法利用了前缀和数组的特性,使得查询操作非常高效。

举报
0 条评论