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

首先我们的目标是让 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;

}

相关推荐
m0_7482567816 分钟前
WebGIS实战开源项目:智慧机场三维可视化(学习笔记)
笔记·学习·开源
红色的山茶花20 分钟前
YOLOv9-0.1部分代码阅读笔记-loss.py
笔记
胡西风_foxww3 小时前
【es6复习笔记】Promise对象详解(12)
javascript·笔记·es6·promise·异步·回调·地狱
吉大一菜鸡8 小时前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
CCSBRIDGE11 小时前
Magento2项目部署笔记
笔记
亦枫Leonlew11 小时前
微积分复习笔记 Calculus Volume 2 - 5.1 Sequences
笔记·数学·微积分
爱码小白12 小时前
网络编程(王铭东老师)笔记
服务器·网络·笔记
LuH112413 小时前
【论文阅读笔记】Learning to sample
论文阅读·笔记·图形渲染·点云
一棵开花的树,枝芽无限靠近你14 小时前
【PPTist】组件结构设计、主题切换
前端·笔记·学习·编辑器
犬余15 小时前
设计模式之桥接模式:抽象与实现之间的分离艺术
笔记·学习·设计模式·桥接模式