题意
给出一个长度为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])
}
}

京公网安备 11010502036488号