Suma de submatrices

Descripción del título

Ingrese una matriz entera con n filas ym columnas, y luego ingrese consultas Q. Cada consulta contiene cuatro enteros x1, y1, x2, y2, que representan las coordenadas superior izquierda e inferior derecha de una submatriz.

Para cada consulta, se emite la suma de todos los números en la submatriz.

Formato de entrada

La primera línea contiene tres enteros n, m, q.

Las siguientes n filas, cada fila contiene m enteros, representan una matriz entera.

Las siguientes q líneas, cada línea contiene cuatro enteros x1, y1, x2, y2, que representan un grupo de consultas.

Formato de salida

Hay q líneas en total, y cada línea genera el resultado de una consulta.

Rango de datos

1≤n, m≤1000,
1≤q≤200000,
1≤x1≤x2≤n,
1≤y1≤y2≤m,
−1000≤valor de elementos en la matriz ≤1000

Entrada de muestra:

3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4

Salida de muestra:

17
27
21

Ideas para resolver problemas

Esta pregunta es el prefijo bidimensional y

Prefijo e inicialización

Inserte la descripción de la imagen aquí
Para el punto de A i, j, la suma es

s [i] [j] = s [i-1] [j] + s [i] [j-1] - s [i-1] [j-1] + a [i] [j]

Prefijo y fórmula de recursión

Inserte la descripción de la imagen aquí
Para dos puntos, x1, y1, x2, y2; la suma entre ellos es

s [x2] [y2] - s [x2] [y1-1] - x [x1-1] [y2] + s [x1-1] [y1-1]

Implementación de código

#include<iostream>
using namespace std;
const int N =1010;
int a[N][N],s[N][N];
int n,m,q;

int main()
{
    scanf("%d%d%d",&n,&m,&q);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            scanf("%d",&a[i][j]);
            
    //初始化前缀和
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            s[i][j] = s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
    
    while(q--)
    {
        int res = 0;
        int x1,y1,x2,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        res = s[x2][y2] - s[x2][y1-1] - s[x1-1][y2] +s[x1-1][y1-1];
                
        cout<<res<<endl;
    }
    return 0;
}
Sol
Publicado 253 artículos originales · elogiado 41 · 40,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/liuyuchen282828/article/details/105651189
Recomendado
Clasificación