自己写的,超时了,预料之中
#include <iostream>
using namespace std;
const int N=100010;
int a[N];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
int t;
cin>>t;
if(i==1)a[i]=t;
if(i>1)
a[i]=t+a[i-1];
}
while(m--){
int l,r;
cin>>l>>r;
cout<<a[r]-a[l-1]<<endl;
}
return 0;
}
那就动用前缀合算法,将每一行(y一样)加起来,ok,ac过了。
#include <iostream>
using namespace std;
const int N=1010;
int a[N][N];
int main(){
int n,m,q;
cin>>n>>m>>q;
int t;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>t;
a[i][j]=a[i][j-1]+t;
}
}
int x1,y1,x2,y2,sum;
while(q--){
sum=0;
cin>>x1>>y1>>x2>>y2;
for(int i=x1;i<=x2;i++){
sum=sum+(a[i][y2]-a[i][y1-1]);
}
cout<<sum<<endl;
}
return 0;
}