子矩阵的和 刷题笔记 {二维前缀和}

首先我们的目标是让 s[i][j]表示为其左方和上方形成的矩阵所有元素的和

加上s[i-1][j]和s[i][j-1]后 s[i-1][j-1]部分重复了所以减去

最后加上a[i][j]即可完成目标

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

然后看题目要求

要求x1,y1,x2,y2围成的小正方形内的元素和

我们利用刚刚处理好的s[i][j]来操作

将是s[x2][y2]圈成的大正方形里面扣掉这两块

即s[x2][y1-1]和s[x1-1][y2]

最后加回去重复减去的s[x1-1][y1-1]即可

所以式子为 s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1];

代码

#include<iostream>

#include<cstring>

#include<cstdio>

#include<algorithm>

using namespace std;

const int N=1010;

int a[N][N],s[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++)

{

cin>>a[i][j];

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

}

}

while(q--){

int x1,y1,x2,y2;

cin>>x1>>y1>>x2>>y2;

cout<<s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1];

}

return 0;

}

相关推荐
moxiaoran57532 小时前
uni-app学习笔记五-vue3响应式基础
笔记·学习·uni-app
饕餮争锋2 小时前
org.slf4j.MDC介绍-笔记
java·开发语言·笔记
weixin_448119942 小时前
Datawhale 5月llm-universe 第1次笔记
笔记
chennalC#c.h.JA Ptho2 小时前
lubuntu 系统详解
linux·经验分享·笔记·系统架构·系统安全
m0_689618284 小时前
从海洋生物找灵感:造个机器人RoboPteropod,它能在水下干啥?
笔记·机器人
龙湾开发5 小时前
轻量级高性能推理引擎MNN 学习笔记 02.MNN主要API
人工智能·笔记·学习·机器学习·mnn
HappyAcmen6 小时前
线代第二章矩阵第八节逆矩阵、解矩阵方程
笔记·学习·线性代数·矩阵
愚润求学8 小时前
【递归、搜索与回溯】专题一:递归(二)
c++·笔记·算法·leetcode
愚润求学8 小时前
【Linux】基础 IO(一)
linux·运维·服务器·开发语言·c++·笔记
Wallace Zhang8 小时前
STM32F103_LL库+寄存器学习笔记22 - 基础定时器TIM实现1ms周期回调
笔记·stm32·学习