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