Suma de submatrices de C ++ (suma de prefijo bidimensional)

Ingrese una matriz entera con n filas ym columnas, y luego ingrese q consultas. Cada consulta contiene cuatro enteros x1, y1, x2, y2, que representan las coordenadas de la esquina superior izquierda y la esquina inferior derecha de una submatriz.
Para cada consulta, genere la suma de todos los números en la submatriz.
Formato de entrada La
primera línea contiene tres números enteros n, m, q.
Las siguientes n filas, cada fila contiene m enteros, que representan una matriz de enteros.
En la siguiente línea q, cada línea contiene cuatro números enteros x1, y1, x2, y2, que representan un conjunto de consultas.
Formato de salida Hay
q líneas en total, y cada línea genera un resultado de consulta.
Rango de datos
1≤n, m≤1000,1≤q≤200000,
1≤x1≤x2≤n, 1≤y1≤y2≤m,
−1000≤valor de elementos en matriz≤1000
Ejemplo de entrada:
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
Ejemplo de salida:
17
27
21

Código AC:

#include<stdio.h>

int a[1010][1010];
int n,m,q;

int main()//坐标系:行号对应x坐标,列号对应y坐标
{
    
    
    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]);//加了两次要抵消掉一次
            a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
        }
    }
    int x1,y1,x2,y2;
    while(q--)
    {
    
    
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);//减了两次要抵消掉一次
        printf("%d\n",a[x2][y2]-a[x2][y1-1]-a[x1-1][y2]+a[x1-1][y1-1]);
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_44643644/article/details/108783592
Recomendado
Clasificación