acwing796-子矩阵的和-前缀和


s矩阵是全局变量,维度n*m,从1~n和 1~m存储元素【0】【0】~【0】【m】和【0】【0】~【n】【0】分别存储的都是0.s矩阵刚开始是存储输入的元素,后面用于存储前缀和。

s矩阵的意思是s【i】【j】表示从【0】【0】到【i】【j】为对角线的矩阵里面所有元素的和。

假设s【x1】【y1】=17,s【x2】【y2】=41,求对角线矩阵【x1】【y1】到【x2】【y2】的矩阵的所有元素和,也就是

黄色面积等于红色面积减去绿色面积再减去蓝色面积再加上紫色面积,

S~黄~=S~红~-S~绿~-S~蓝~+S~紫~

加上S~紫~是因为他这部分被两次减去,实际上只需要减去1次即可!加上这1次S~紫~就好了

cpp 复制代码
#include <iostream>

using namespace std;

const int N = 1010;

int n, m, q;
int s[N][N];

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", &s[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];

    while (q -- )
    {
        int x1, y1, x2, y2;
        scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
        printf("%d\n", s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]);
    }

    return 0;
}
相关推荐
地平线开发者28 分钟前
CPU& 内存加压工具 stress-ng 介绍
算法·自动驾驶
XY.散人31 分钟前
初识算法 · 分治(2)
算法
DanielYQ32 分钟前
LCR 001 两数相除
开发语言·python·算法
冉佳驹38 分钟前
数据结构 ——— 希尔排序算法的实现
c语言·数据结构·算法·排序算法·希尔排序
St_Ludwig1 小时前
C语言 蓝桥杯某例题解决方案(查找完数)
c语言·c++·后端·算法·游戏·蓝桥杯
是糖不是唐1 小时前
代码随想录算法训练营第五十三天|Day53 图论
c语言·数据结构·算法·图论
sweetheart7-71 小时前
LeetCode20. 有效的括号(2024冬季每日一题 11)
c++·算法·力扣··括号匹配
Mr.谢尔比1 小时前
李宏毅机器学习课程知识点摘要(1-5集)
人工智能·pytorch·深度学习·神经网络·算法·机器学习·计算机视觉
我是博博啦2 小时前
matlab例题
人工智能·算法·matlab
ö Constancy2 小时前
设计LRU缓存
c++·算法·缓存