news 2025/12/28 5:06:52

【算法通关指南:算法基础篇(四)】二维差分专题:1.【模板】差分 2.地毯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【算法通关指南:算法基础篇(四)】二维差分专题:1.【模板】差分 2.地毯

🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《算法通关指南》
永远相信美好的事情即将发生


文章目录

  • 前言
  • 一、二维差分
  • 二、二维差分经典算法题
    • 2.1【模板】差分
      • 2.1.1题目
      • 2.1.2 算法原理
      • 2.2.3代码
    • 2.2 地毯
      • 2.2.1题目
      • 2.2.2 算法原理
      • 2.2.3代码
  • 总结与每日励志

前言

本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力
ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长


一、二维差分

可以类比「⼀维差分数组」的性质,推导出「⼆维差分矩阵」的性质:
• 在差分数组中某个位置标记:表示后续元素统⼀被修改;
• 在差分数组中求前缀和:能够还原出原始数组。
假设我们需要将原始矩阵a中,以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵的每个元素都加上k

结论
由此可得差分矩阵的性质:
f[x1 ][y1 ]+ = k
f[x1 ][y2 + 1]− = k
f[x2 + 1][y1 ]− = k
f[x2 + 1][y2 + 1]+ = k

二、二维差分经典算法题

2.1【模板】差分

2.1.1题目

链接:【模板】差分

2.1.2 算法原理

依照刚才讲解二维差分原理模拟即可

2.2.3代码

#include<iostream>using namespace std;typedeflonglongLL;constintN=1100;LL f[N][N];voidcacl(LL x1,LL y1,LL x2,LL y2,LL k){f[x1][y1]+=k;f[x1][y2+1]-=k;f[x2+1][y1]-=k;f[x2+1][y2+1]+=k;}intmain(){intn,m,q;cin>>n>>m>>q;for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){LL x;cin>>x;// [i, j]为左上⻆,[i, j]为右下⻆的矩阵,统⼀加上 xcacl(i,j,i,j,x);}}while(q--){LL x1,y1,x2,y2,k;cin>>x1>>y1>>x2>>y2>>k;cacl(x1,y1,x2,y2,k);}for(inti=1;i<=n;i++){for(intj=1;j<=m;j++)f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];}for(inti=1;i<=n;i++){for(intj=1;j<=m;j++)cout<<f[i][j]<<" ";cout<<endl;}return0;}

2.2 地毯

2.2.1题目

链接:地毯

2.2.2 算法原理

直接利⽤二维差分矩阵模拟即可

2.2.3代码

#include<iostream>using namespace std;constintN=1010;inta[N][N];// 差分矩阵voidcacl(intx1,inty1,intx2,inty2){a[x1][y1]++;a[x1][y2+1]--;a[x2+1][y1]--;a[x2+1][y2+1]++;}intmain(){intn,m;cin>>n>>m;while(m--){intx1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;cacl(x1,y1,x2,y2);}for(inti=1;i<=n;i++){for(intj=1;j<=n;j++)a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];}for(inti=1;i<=n;i++){for(intj=1;j<=n;j++)cout<<a[i][j]<<" ";cout<<endl;}return0;}

总结与每日励志

本文介绍了二维差分算法的原理和应用。二维差分通过在特定位置标记增量,可以高效处理子矩阵元素的批量修改。文章通过两道经典算法题(模板差分和地毯问题)展示了二维差分的实现方法,提供了完整的代码示例。核心思想是利用差分矩阵的性质,通过前缀和还原原始数组。算法简洁高效,适用于大规模矩阵操作。作者鼓励读者坚持学习,相信付出终有回报。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/27 14:09:56

鸿蒙简易时钟应用

代码功能概述这段代码实现了一个功能完整的鸿蒙时钟应用&#xff0c;全面展示了ArkTS在时间处理、多时区显示、闹钟设置和界面动画等方面的核心能力。主要功能包括&#xff1a;模拟时钟&#xff1a;显示带有时针、分针、秒针的模拟时钟数字时钟&#xff1a;显示精确到秒的数字时…

作者头像 李华
网站建设 2025/12/27 6:21:17

大模型在手术操作后呼吸衰竭预测及围手术期方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、大模型预测呼吸衰竭的原理与方法 2.1 常用大模型介绍 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前风险预测与准备方案 3.1 术前风险因素分析 3.2 大模型预测术前风险的方法与结果 3.3…

作者头像 李华
网站建设 2025/12/22 13:43:34

大模型在金黄色葡萄球菌性败血症预测及围手术期管理中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、金黄色葡萄球菌性败血症概述 2.1 定义与流行病学 2.2 病因与发病机制 2.3 临床表现与诊断标准 2.4 并发症与危害 三、大模型技术原理及在医疗领域的应用 3.1 大模型技术概述 3.2…

作者头像 李华
网站建设 2025/12/22 13:43:21

(附源码)基于Web的高校体育成绩管理系统设计与实现-计算机毕设 30378

基于Web的高校体育成绩管理系统设计与实现 摘要 研究旨在设计并实现一个基于Web的高校体育成绩管理系统&#xff0c;以应对传统体育成绩管理方式中存在的效率低下、数据易丢失及分析不便等问题。通过采用现代化的信息技术手段&#xff0c;该系统致力于提高体育教学管理的科学性…

作者头像 李华
网站建设 2025/12/25 18:38:31

android开发 拆分包APK的安装方式

android开发 拆分包APK的安装方式 以Infinity meta Jr应用安装为例&#xff1a;该应用使用 Split APK&#xff08;拆分安装包&#xff09; 安装方式&#xff0c;必须一次性安装所有文件。 不要只安装 base.apk。 安装方式1&#xff1a;使用 ADB 命令&#xff08;适用于开发人…

作者头像 李华
网站建设 2025/12/23 14:03:32

Java Lambda stream reduce

引言reduce 是 Java Stream API 中的一个重要方法&#xff0c;用于将流中的元素反复结合起来&#xff0c;得到一个值。它常用于聚合、累加、拼接等操作。下面是详细说明&#xff1a;1. 基本语法有三种常用形式&#xff1a;1.1 无初始值&#xff08;返回 Optional&#xff09;Op…

作者头像 李华