当前位置: 首页 > news >正文

二维差分详解

前言
上一期我们分享了一维差分的使用方法,这一期我们将接着上期的内容带大家了解二位差分的使用方法,话不多说,LET’S GO!(上一期链接)
在这里插入图片描述

二维差分
二维差分我们可以用于对矩阵区间进行多次操作的题。
二维差分我们还可以采用一维差分的思想,如图假如我们要对区间[x1,x2],[y1,y2]的元素都+1:
在这里插入图片描述
即:

        arrsum[x1][y1] += 1;arrsum[x1][y2+1] -= 1;arrsum[x2+1	][y1] -= 1;arrsum[x2+1][y2+1] += 1;

思路就是这样,操作完之后直接求数组全缀合就是目标矩阵数组,下面我们上实战。
给出矩阵数组arr,共有n行m列,对其进行t次操作,每次操作会对[ x1 , x2 ],[ y1,y2 ]区间内的元素+1,请输出进行操作后的arr数组。
输入样例
第一行为n,m和q
往后n行为矩阵数组的元素
往后q行为x1,y1,x2,y2
测试样例
3 3 2
1 1 1
1 1 1
1 1 1
1 1 2 2
2 2 3 3
输出样例
2 2 1
2 3 2
1 2 2
题解:

#include<stdio.h>
int arr[100][100];
int arrsum[100][100];//前缀和数组
int main()
{int n, m, t;scanf("%d %d %d", &n, &m, &t);for (int i = 1; i <= n; i++)//输入数组{for (int j = 1; j <= m; j++){scanf("%d", &arr[i][j]);}}for (int i = 1; i <= n; i++)//操作arrsum数组使其前缀和为目标数组{for (int j = 1; j <= m; j++){arrsum[i][j] += arr[i][j];arrsum[i+1][j] -= arr[i][j];arrsum[i][j+1] -= arr[i][j];arrsum[i+1][j+1] += arr[i][j];}}while (t--)//t次操作{int x1, y1, x2, y2;scanf("%d %d %d %d", &x1, &y1, &x2, &y2);arrsum[x1][y1] += 1;arrsum[x1][y2+1] -= 1;arrsum[x2+1	][y1] -= 1;arrsum[x2+1][y2+1] += 1;}for (int i = 1; i <= n; i++)//求前缀和{for (int j = 1; j <= m; j++){arrsum[i][j] += arrsum[i-1][j]+arrsum[i][j-1]-arrsum[i-1][j-1];	}}for (int i = 1; i <= n; i++)//打印目标数组{for (int j = 1; j <= m; j++){printf("%d ", arrsum[i][j]);}printf("\n");}return 0;
}

尾声
本期分享就到这里,如果觉得博主讲的不错的话请给博主一个关注,点赞,收藏支持一下吧~,博主还将持续分享更多知识,我们下期再见!

相关文章:

  • Uniapp/微信小程序授权设置并实现点击保存图片
  • 安路IP核应用举例(OSC、UART)
  • 互联网加竞赛 python+opencv+机器学习车牌识别
  • 四十二、Redis
  • 一些好用的VSCode扩展
  • C++:命名空间
  • input、el-input输入框输入规则
  • DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统)
  • 【自定义Source、Sink】Flink自定义Source、Sink对ClickHouse进行读和批量写操作
  • 【模块化】 js 模块化(CommonJS, AMD, UMD, CMD, ES6)
  • linux系统命令
  • 基于OHTPPS实现网站HTTPS访问
  • 使用国内镜像源安装opencv
  • 计算机组成原理-选择语句和循环语句的汇编表示
  • 【数据结构】第二章——线性表(1)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • gf框架之分页模块(五) - 自定义分页
  • hadoop集群管理系统搭建规划说明
  • Java 最常见的 200+ 面试题:面试必备
  • Javascript 原型链
  • JS 面试题总结
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP的Ev教程三(Periodic watcher)
  • Vue.js 移动端适配之 vw 解决方案
  • vue学习系列(二)vue-cli
  • WebSocket使用
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 工作中总结前端开发流程--vue项目
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 我有几个粽子,和一个故事
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #Z0458. 树的中心2
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (+4)2.2UML建模图
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (二)Linux——Linux常用指令
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm高校实验室 毕业设计 800008
  • (转)甲方乙方——赵民谈找工作
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .htaccess 强制https 单独排除某个目录
  • .Net 4.0并行库实用性演练
  • .net 提取注释生成API文档 帮助文档
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net中我喜欢的两种验证码
  • :“Failed to access IIS metabase”解决方法
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @Data注解的作用
  • [20180129]bash显示path环境变量.txt
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [AR Foundation] 人脸检测的流程