796.子矩阵的和(acwing)

文章目录

  • 796.子矩阵的和
    • 题目描述
    • 前缀和

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 <bits/stdc++.h> // 包含大部分标准库
using namespace std;const int z = 1010; // 设置数组的最大长度,因为数据范围是1≤n,m≤1000
int a[z][z], s[z][z]; // a是原始的矩阵,s是用来存储前缀和的矩阵int main()
{int n, m, q; // n是行数,m是列数,q是查询次数scanf("%d %d %d", &n, &m, &q); // 读入n, m, qfor (int i = 1; i <= n; i++) // 从1开始,因为前缀和需要从(1,1)开始计算{for (int j = 1; j <= m; j++){scanf("%d", &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; // 查询的子矩阵的左上角和右下角坐标scanf("%d %d %d %d", &x1, &y1, &x2, &y2); // 读入查询坐标// 输出查询的子矩阵的和// 根据容斥原理计算子矩阵的和:总和等于大矩形的和减去左边和上边矩形的和再加上重叠部分左上角矩形的和printf("%d\n", s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1]);}return 0;
}

这段代码的核心思想是二维前缀和。二维前缀和是一种数据预处理技术,它使得我们能够快速(在常数时间内)查询任何子矩阵的元素和。二维前缀和 s[i][j] 表示原始矩阵中所有位于第1行第1列到第i行第j列形成的子矩阵的元素之和。

这样,如果我们想要计算任何子矩阵(x1, y1)到(x2, y2)的元素和,我们可以通过四个前缀和来计算,这是通过以下方式完成的:

s[x2][y2] - (左边的矩形)s[x2][y1 - 1] - (上边的矩形)s[x1 - 1][y2] + (因为重复减去了左上角的矩形所以要加回来)s[x1 - 1][y1 - 1]

这个方法大大减少了查询的时间复杂度,使得即使在大量查询中也能保持高效的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium鼠标操作实战

鼠标操作实战 鼠标单击操作 click()内置鼠标操作包ActionChains鼠标双击操作double_click()鼠标右击操作context_click()鼠标指针悬浮操作move_to_element(ele)鼠标拖动操作drag_and_drop(source, target)其他鼠标操作汇总 鼠标单击操作 click() from selenium import webdriv…

python中的文件操作2

文件遍历 在Python中&#xff0c;遍历文件通常指的是逐行读取文件中的内容。这种方式对于处理大型文件特别有用&#xff0c;因为它不需要一次性将整个文件加载到内存中。下面是几种常见的遍历文件内容的方法&#xff1a; 1. 使用with语句和for循环 这是最推荐的方式&#xf…

“2024杭州智慧城市及安防展会”将于4月在杭州博览中心盛大召开

2024杭州国际智慧城市及安防展览会&#xff0c;将于4月24日在杭州国际博览中心盛大开幕。这场备受瞩目的盛会&#xff0c;不仅汇集了全球智慧城市与安防领域的顶尖企业&#xff0c;更是展示最新技术、交流创新理念的重要平台。近日&#xff0c;从组委会传来消息&#xff0c;展会…

独孤思维:买了台一千块钱的电脑干副业

01 如何让自己集中精力做一件事情&#xff1f; 之前有个圈内大佬&#xff0c;为了写作集中精力&#xff0c;硬生生买了一个一千多的电脑。 这个电脑能干嘛&#xff1f; 只能写作&#xff0c;打字&#xff0c;连视频都卡&#xff0c;游戏就更不可能了。 为的是&#xff0c;…

【网站项目】089理发店会员管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

设计模式之模版方法实践

模版方法实践案例 实践之前还是先了解一下模版方法的定义 定义 模板方法模式是一种行为设计模式&#xff0c;它定义了一个骨架&#xff0c;并允许子类在不改变结构的情况下重写的特定步骤。模板方法模式通过在父类中定义一个模板方法&#xff0c;其中包含了主要步骤&#xf…

上海亚商投顾:沪指缩量调整 机器人概念股午后大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日缩量震荡&#xff0c;创业板指午后涨超1%&#xff0c;随后上演冲高回落走势。风电、光伏等新能源方向…

Redis第7讲——哨兵模式详解

为了解决主从模式的无法自动容错及恢复的问题&#xff0c;Redis在主从复制的基础上加入了哨兵节点&#xff0c;也就是我们熟悉的哨兵模式。但现在基本不会用到哨兵模式&#xff0c;也就是这种模式只存在于面试中。 一、什么是哨兵模式 ps&#xff1a;主从服务器之间的数据同步…

ping多个IP的工具

Ping Tool 项目地址 python开发的IP搜索小工具 ping一个网段所有IP&#xff0c;显示结果查看某个ip地址开放监听的端口配置可保存

MogDB/openGauss更改数据库目录位置建议测试环境

MogDB/opengauss 更改数据库目录位置(建议测试环境) 有时我们部署完数据库&#xff0c;发现随着数据量的不断增加&#xff0c;数据目录所在的磁盘大小不能够满足我们的需求&#xff0c;需要更大的磁盘空间&#xff0c;这时选择重新部署数据库会很麻烦&#xff0c;之前所使用的…

Python基于opencv的人脸识别上课签到考勤系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

MATLAB环境下基于图像处理的计算病理学图像分割(MATLAB R2021B)

人工智能是病理学诊断和研究的重要新兴方法&#xff0c;其不仅可用于病理形态数据分析&#xff0c;还可整合免疫组化、分子检测数据和临床信息&#xff0c;得出综合的病理诊断报告&#xff0c;为患者提供预后信息和精准的药物治疗指导。计算病理学是病理学与AI、计算机视觉等信…

vant van-field 密码输入框小程序里隐藏、显示密码bug总结

老规矩先上效果图: vant 输入框组件 密码的隐藏与显示功能&#xff1a; 注: 用password属性控制密码的显示与隐藏 不要用type属性&#xff0c;type属性在真机上有时会没有效果 1、当然如果只用typepassword 不需要切换显示、隐藏也可以使用。 2、如果用到了密码的显示与…

面试问答之Spring进阶

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;说说你对Spring的认识与理解&#x1f415;Bean的分类&#x1f415; BeanFactory 接口和ApplicationContex 接口 的区别&#x1f415;SpringBe…

20240306 大模型快讯

//社区生态// Anthropic释出人类最强大模型Claude 3。Anthropic公开目前人类最强大模型Claude 3&#xff0c;在数学、编程、多语言理解、视觉等多个维度性能均超过GPT-4和Gemini 1.0 Ultra。 //多模态大模型// Stability AI公开Stable Diffusion 3架构细节。Stability AI 发布…

CIA402协议笔记

文章目录 1、对象字典1.1 Mode of Operation&#xff08; 606 0 h 6060_h 6060h​)1.2 Modes of opration display( 606 1 h ) 6061_h) 6061h​) 2、状态机2.1 控制字&#xff08;ControlWord、6040h&#xff09;2.2 状态字&#xff08;StatusWord、6041h&#xff09;2.3 shutd…

React富文本编辑器开发(十三)序列化

序列化 Slate 的数据模型是以序列化为目标构建的。具体而言&#xff0c;它的文本节点的定义使它们更容易一目了然&#xff0c;但也易于序列化为常见格式&#xff0c;如 HTML 和 Markdown。 而且&#xff0c;由于 Slate 使用普通的 JSON 来存储数据&#xff0c;您可以非常轻松…

视频扩散模型介绍 Video Diffusion Models Introduction

视频扩散模型介绍 Video Diffusion Models Introduction Diffusion 扩散模型中的一些概念DDPMDDIMCLIPLatent DiffusionStable DiifusionLoRADreamBoothControlNet 视频生成评估标准图片层面视频层面 前人的工作Make-A-VideoAlign your Latents 开源视频生成模型ModelScopeT2V&…

一人企业:一个人也能赚钱的商业模式读书笔记

一人企业:一个人也能赚钱的商业模式 哈佛大学攻读MBA时,汤姆就给漫画投稿,虽然毕业之后在商界打拼,但从小喜欢画漫画的汤姆2010年还是毅然辞去一家大型食品公司营销副总裁这一光鲜的职位。他并非一时兴起,也没有变成反资本主义的嬉皮士。和其他人一样,他认真地规划并将他…