题意

给出一个长度为n的数组和q次询问,每次询问求区间[l,r]的数组的元素和。

思路

数据范围n和q都是1e6,数组元素<=1e9,暴力的做法会超时,考虑用前缀和优化。在输入的时候维护sum数组,要注意用long long / int64 ,对于每次询问直接输出sum[r] - sum[l-1]即可。

C++代码

#include <iostream>
using namespace std;

const int maxn = 1e6+10;

int main() {
    long long n,q,l,r,x,sum[maxn];
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>x;
        sum[i] = sum[i-1] + x;
    }
    while(q--){
        cin>>l>>r;
        cout<<sum[r] - sum[l-1]<<endl;
    }

}
// 64 位输出请用 printf("%lld")

Go代码

没过(有没有大佬能帮忙看下为啥

package main

import (
    "fmt"
)

func main() {
    var n,q int
    var x int64
    fmt.Scan(&n,&q)
    sum := make([]int64,n+1)
    for i := 1; i <= n; i ++ {
        fmt.Scan(&x)
        sum[i] = sum[i-1] + x
    } 
    for i := 1; i <= q; i ++ {
        var l,r int 
        fmt.Scan(&l,&r)
        fmt.Println(sum[r] - sum[l-1])
    }
}