前缀和

一维前缀和

const int N=1e5+10;
int a[N],sum[N];
int n,m;

int main()
{
    cin>>n>>m;

    for(int i=1;i<=n;i++) cin>>a[i];

    for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];

    while(m--)
    {
        int l,r;
        cin>>l>>r;
        cout<<sum[r]-sum[l-1]<<endl;
    }
    //system("pause");
}

二维前缀和

const int N=1010;
int a[N][N],sum[N][N];
int n,m,q;

int main()
{
    cin>>n>>m>>q;

    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&a[i][j]);
            sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
        }

    while(q--)
    {
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        cout<<sum[c][d]-sum[c][b-1]-sum[a-1][d]+sum[a-1][b-1]<<endl;
    }
    //system("pause");
}
原文地址:https://www.cnblogs.com/fxh0707/p/13561954.html