#include<bits/stdc++.h>
using namespace std;
int main(){
int n,q;
scanf("%d %d",&n,&q);
vector<int> a(n);
vector<long long> sum(n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(i==0){
sum[i]=a[i];
}else{
sum[i]=sum[i-1]+a[i];
}
}
while(q!=0){
q--;
int l,r;
cin >> l >> r;
if(l>1){
cout << sum[r-1]-sum[l-2] << endl;
}else{
cout << sum[r-1] << endl;
}
}
}
前缀和
using namespace std;
int main(){
int n,q;
scanf("%d %d",&n,&q);
vector<int> a(n);
vector<long long> sum(n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(i==0){
sum[i]=a[i];
}else{
sum[i]=sum[i-1]+a[i];
}
}
while(q!=0){
q--;
int l,r;
cin >> l >> r;
if(l>1){
cout << sum[r-1]-sum[l-2] << endl;
}else{
cout << sum[r-1] << endl;
}
}
}
前缀和
如果在每次输入一个q时,都去进行循环,时间复杂度会非常大,所以在每次输入一个a的同时可以先计算出前i项的和,然后最后用r减去l的前一个值,就可以得出区间和

京公网安备 11010502036488号