首页 > 其他分享 >二维前缀和模板

二维前缀和模板

时间:2024-10-30 22:42:15浏览次数:4  
标签:x1 前缀 int sum y1 二维 x2 y2 模板

二维前缀和模板

题目描述:

输入一个 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

解题思路:

我们首先要理解,sum[i,j]是什么意思。

image

如图所示,sum[i,j]就是红色区域所包含的所有数之和.

但是题目要求我们把,[x1,y1]到[x2,y2]区域内数之和求出来,所以我们可以再画一个图.

image

如图所示,我们要求[x1,y1]到[x2,y2]内所有数之和,是不是可以让sum[x2,y2]减去黄色区域之和,也就是sum[x2,y2]-sum[x1-1,y2]-sum[x2,y1-1],但是我们会发现,这样会使蓝色区域被减两边,所以我们还需要把蓝色区域加一遍,最终表达式也就是

sum[x2,y2]-sum[x1-1,y2]-sum[x2,y1-1]+sum[x1-1,y1-1]

还有一步,我们要处理这个前缀和。

image

如图,我们要求sum[i,j],先让黄色区域加起来,也就是sum[i-1,j]+sum[i,j-1],这样会让蓝色区域加重,再减去蓝色区域,也就是sum[i-1,j-1],最后再加上a[i,j]就是我们要求的式子。

表达式如下:

sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,m,q;
int a[N][N],sum[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",&a[i][j]);
		}
	}
	
	//处理前缀和 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			 sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[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",sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]);
		
	}
	
	
	
	
	return 0;
}

标签:x1,前缀,int,sum,y1,二维,x2,y2,模板
From: https://www.cnblogs.com/xie-blog/p/18516759

相关文章

  • 基于STL的自定义栈与队列实现:灵活选择底层容器的模板设计
    文章目录代码模板设计主要成员函数底层容器的选择模板设计底层容器的选择关于stack的示例代码关于queue的示例代码前言:在本文中,我们将分析一个模拟C++标准模板库(STL)栈的自定义实现以及模仿C++标准模板库(STL)队列的自定义实现。该stack类模板允许在底层容器的选择......
  • 详解:模板设计模式
            模板设计模式(TemplatePattern)是一种行为设计模式,在软件设计中有着广泛的应用,旨在提高代码的可维护性和可复用性。一、定义与特点定义:模板设计模式定义了一个算法的骨架,将某些步骤推迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些......
  • 【算法】前缀树
    基本内容以树的方式存储字符串的数据结构,方便字符串的查找及判断是否为某一字符串的前缀入门例子PHONELST-PhoneList-洛谷|计算机科学教育新生态题目要求:判断一组字符串中是否存在某一字符串是另一字符串的前缀。例如在{“911”,“91140”,“20”,“912”}中,“911”......
  • manim边学边做--通用二维坐标系
    Manim的Axes对象是通用的坐标系对象,之前几篇介绍的数轴和各种坐标平面都是继承Axes对象。Axes对象的主要作用在于创建和管理二维坐标轴,以满足我们制作数学动画时的各种需求。具体来说,Axes对象可以帮助我们:定义坐标系:定义一个明确的坐标系,通过设置x轴和y轴的范围、步长等参数,创......
  • Windows Server 2022 OVF, updated Oct 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2022OVF,updatedOct2024(sysin)-VMware虚拟机模板2024年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2022-ovf/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现......
  • Windows Server 2019 OVF, updated Oct 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2019OVF,updatedOct2024(sysin)-VMware虚拟机模板2024年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2019-ovf/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWin......
  • Windows Server 2016 OVF, updated Oct 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedOct2024(sysin)-VMware虚拟机模板2024年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现......
  • Windows Server 2008 R2 OVF, updated Aug 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2008R2OVF,updatedAug2024(sysin)-VMware虚拟机模板WindowsServer2008R2简体中文版OVF,2024年10月更新请访问原文链接:https://sysin.org/blog/windows-server-2008-r2-ovf/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWindows......
  • PbootCMS 模板提示未检测到您服务器环境的sqlite3数据库扩展
    错误信息:未检测到您服务器环境的sqlite3数据库扩展,请检查php.ini中是否已经开启该扩展!另外,检测到您服务器支持pdo_sqlite扩展,您也可以修改数据库配置连接驱动为pdo_sqlite试试!解决方法:1.**第一种方法**:把数据库配置连接驱动改为pdo_sqlite-打开数据库配置文件`/apps/co......
  • 帝国CMS中打印模板制作教程详解
    调用打印页面链接:模板中添加打印页面链接:[!--news.url--]e/DoPrint/?classid=[!--classid--]&id=[!--id--]指定使用打印模板的链接:[!--news.url--]e/DoPrint/?classid=[!--classid--]&id=[!--id--]&tempid=打印模板ID管理打印模板:登录后台,选择“模板......