二维前缀和C++模板:

S[i, j] = 第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[x2, y2] - S[x1-1,y2] - S[x2,y1-1] + S[x1-1,y1-1]

二维前缀和理解:
第一步:如何计算S[i, j]?
如下图可以知道,我们要求蓝色的S[3, 4],那么可以知道可以等于绿色S[2, 4]、黄色S[3, 3]和蓝色a[3 ,4]相加,但是红色S[2 ,3]多加了所以需要减掉。
最后的出公式:S[i, j] = S[i-1,j] + s[i,j-1] - S[i-1,j-1] + a[i,j](表示当前的数)

第二步:如何计算以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和?
如下图可以知道,我们要求红色的以(2, 3)左上角和(4, 5)右下角的子矩阵,那么可以知道,为蓝色S[4, 5] -绿色S[4 ,2] - 黄色S[1, 5] + 棕色S[1, 2]
最后得出公式:S[x2, y2] - S[x1-1,y2] - S[x2,y1-1] + S[x1-1,y1-1]

题目: 796. 子矩阵的和
输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。
对于每个询问输出子矩阵中所有数的和。

输入格式
第一行包含三个整数 n,m,q。
接下来 n 行,每行包含 m 个整数,表示整数矩阵。
接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。

输出格式
共 q 行,每行输出一个询问的结果。

数据范围
1≤n,m≤1000,
1≤q≤200000,
1≤x1≤x2≤n,
1≤y1≤y2≤m,
−1000≤矩阵内元素的值≤1000

输入样例:

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

输出样例:

17
27
21

#include <iostream>
using namespace std;const int N=1005;
int s[N][N];
int main()
{int n,m,q;cin>>n>>m>>q;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>s[i][j];s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];}}while(q--){int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;cout<<s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]<<endl;}return 0;
}

基础算法:二维前缀和相关推荐

  1. [算法]二维数组前缀和

    本文目录 引言 题引 题目描述 输入 输出 样例输入 样例输出 解题过程 暴力求解 二维前缀和数组求解 [解读] 二维前缀和算法 本质 图解 代码表述 牛刀小试 题目描述 输入格式 输出格式 输入样例 ...

  2. 二维前缀和(矩形割补法)——杨子曰算法

    二维前缀和(矩形割补法)--杨子曰算法 今天曰一个很实用的技巧,二维前缀和 来,先问一个问题,如果我给出一个矩阵,让你求出任意一个子矩阵的和,你会怎么搞? 哦,简单简单,O(n^2)咔咔地暴力一下,欧 ...

  3. 《算法竞赛进阶指南》打卡-基本算法-AcWing 99. 激光炸弹:二维前缀和

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 前缀和习惯从下标1开始. 注意:本题是不包含边界的.什么意思? 以样例为例,这里有两个点,分别在(0,0) 和(1,1),且攻击的矩 ...

  4. 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】

    [HNOI2003]激光炸弹 题目描述  一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...

  5. 【算法】前缀和(一维前缀和与二维前缀和)

    前缀和是一种重要的预处理,能大大降低查询的时间复杂度. [一维前缀和] 给定一个数组A[1,2,--n],则它的前缀和数组为PrefixSum[1..n].定义为:PrefixSum[i] = A[0 ...

  6. 一维前缀和,二维前缀和,一维差分,二维差分(翻译)

    练习一道题目 输入一个长度为n的整数序列. 接下来再输入m个询问,每个询问输入一对l, r. 对于每个询问,输出原序列中从第l个数到第r个数的和. 输入格式 第一行包含两个整数n和m. 第二行包含n个 ...

  7. 【二维前缀和】304. 二维区域和检索 - 矩阵不可变

    目录 题目 前缀和解法(二维) 二维vector 定义 这道题是「303. 区域和检索 - 数组不可变」的进阶,第 303 题是在一维数组中做区域和检索,这道题是在二维矩阵中做区域和检索. 题目 30 ...

  8. Monitor CodeForces - 846D ——二维前缀和

    Recently Luba bought a monitor. Mon itor is a rectangular matrix of size n × m. But then she started ...

  9. 二维前缀和+差分 HDU6514 Monitor

    Monitor [ HDU - 6514 ] 题目大意:给你个n×m的区域,每个区域被选中标记为1,没被选中标记为0,然后给一些标记的区域,查询若干个区域问是否有0的 一道二维前缀和的题目,想通没什么 ...

最新文章

  1. 阿里深资架构师整理的Java 基础知识小抄 赶紧收藏
  2. linux获取后台进程的控制台数据
  3. 【数学与算法】PCA主成分分析(降维)的通俗理解
  4. 服务器tail正常,cat正常,vim打开中文乱码
  5. 11个常用的SQL技巧
  6. lambda函数 RUNOOB python练习题49
  7. FFmpeg的C++封装:FFmpegWrapper
  8. python 安装html,python安装glob
  9. 学英语(3)---常用语英语
  10. 微软服务器最高版本,企业用的最多的服务器是Windows Server 那个版本,当前,,,
  11. 判断服务是否开启,应用是否安装,并安装应用
  12. 位置度标注方法图解_追踪主力-散户操盘实战图解:操盘手法分析
  13. 思科模拟器路由表怎么看_实战思科 Cisco 模拟器 Packet tracer 使用教程详解.pdf
  14. ​LeetCode刷题实战196:删除重复的电子邮箱
  15. 如何从linux下载超过4G的文件到windows
  16. Qwerty Learner:为键盘工作者设计的单词记忆与英语肌肉记忆锻炼网页
  17. 记录一次canvas小白做相册功能的过程
  18. Data too long for column ‘data‘ at row 1以及设置成longblob造成的乱码解决。node-mysql
  19. c语言 rpg游戏,浅谈RPG游戏设计(一)
  20. 百度地图指定省市进行描边处理,省市外进行半透明遮盖

热门文章

  1. 电商项目测试实战(四)
  2. 计算机病毒及危害教案,计算机病毒及防治教案
  3. 后浪小萌新Python --- 运算符
  4. javascript获取系统时间时区_javascript怎么获取当前时间?
  5. 数据库及数据库表的增删改查基本操作
  6. Pytorch动手实现Transformer机器翻译
  7. JavaScript设计模式之模板方法模式
  8. 5、消防安全重点单位的特有职责
  9. 电商代购系统;海外代购系统;代购程序,代购系统源码PHP前端源码
  10. application/json与application/x-www-form-urlencoded详解