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

6.差分(快速区间 / 子矩阵更新)

6.差分(快速区间 / 子矩阵更新)

核心思想

差分是前缀和的逆运算,通过预处理差分数组,将 “区间加 C” 从 O (n) 优化为 O (1),最终通过前缀和还原原数组。

1. 一维差分

定义

  • 原数组a[1..n],差分数组b[1..n],满足a[i] = b[1] + b[2] + ... + b[i](a 是 b 的前缀和);
  • 区间更新公式:给a[l..r]加 C → b[l] += Cb[r+1] -= C(若 r+1>n 则忽略b[r+1]);
  • 初始化:原数组非零时,可视为 “给每个位置 i 的区间 (i,i) 加 a [i]”。

代码模板(含应用)

#include <cstdio>
using namespace std;const int N = 1e5 + 10;
int a[N], b[N];//原数组a[N],差分数组b[N]// 给区间[l..r]加C
void insert(int l, int r, int c)
{b[l] += c;if (r + 1 <= N) b[r+1] -= c;
}int main() 
{int n, m;cin>>n>>m;// 初始化差分数组(原数组a非零)for(int i = 1; i <= n; i++)  {cin >> a[i];b[i] = a[i] - a[i-1];}// 处理m次区间更新while (m--) {int l, r, c;cin>>l>>r>>c;insert(l, r, c);}// 求前缀和还原原数组for(int i = 1; i <= n; i++)  {a[i] = a[i-1] + b[i];cout << a[i] << ' ';}cout << endl;return 0;
}

2. 二维差分(子矩阵更新)

定义

  • 原矩阵a[1..n][1..m],差分矩阵b[1..n][1..m],满足ab的二维前缀和;
  • 子矩阵更新公式:给a[x1..x2][y1..y2]加 C →b[x1][y1] += Cb[x2+1][y1] -= Cb[x1][y2+1] -= Cb[x2+1][y2+1] += C
  • 初始化:原矩阵非零时,视为 “给每个位置 (i,j) 的子矩阵 (i,j,i,j) 加 a [i][j]”。

\[\begin{cases} b_{x_{1},y_{1}} += C\\ b_{x_{2}+1,y_{1}} -= C\\ b_{x_{1},y_{2}+1} -= C\\ b_{x_{2}+1,y_{2}+1} += C \end{cases} \]

代码模板(含应用)

#include <cstdio>
using namespace std;const int N = 1e3 + 10;
int a[N][N], b[N][N];// 给子矩阵(x1,y1)-(x2,y2)加C
void insert(int x1, int y1, int x2, int y2, int c) 
{b[x1][y1] += c;b[x2+1][y1] -= c;b[x1][y2+1] -= c;b[x2+1][y2+1] += c;
}int main() 
{int n, m, q;scanf("%d%d%d", &n, &m, &q);// 初始化差分矩阵(原矩阵a非零)for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){scanf("%d", &a[i][j]);insert(i, j, i, j, a[i][j]);}}// 处理q次子矩阵更新while (q--) {int x1, y1, x2, y2, c;scanf("%d%d%d%d%d", &x1, &y1, &x2, &y2, &c);insert(x1, y1, x2, y2, c);}// 求二维前缀和还原原矩阵for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {b[i][j] += b[i-1][j] + b[i][j-1] - b[i-1][j-1];printf("%d ", b[i][j]);}printf("\n");}return 0;
}
http://www.jsqmd.com/news/544965/

相关文章:

  • 给黑帮写反侦测系统:他们在暗网给我立生祠
  • 多语言混合编程的架构实践与性能突围
  • GitHub Desktop终极中文汉化指南:3分钟实现全界面本地化
  • 2026年聚能管生产厂家推荐:盐城聚之能环保科技,V型/Π型/B型/C型聚能管全系解决方案 - 品牌推荐官
  • 【架构师老王】AI真的在“杀死”软件吗?从系统烟囱到Agent时代的非侵入式重构
  • ai全程护航:让快马智能助手帮你搞定proteus安装与初学难题
  • PowerBuilder老系统维护指南:PB12.5连接现代数据库(如MySQL 8.0)的避坑实操
  • 2026年Q355B工字钢/H型钢/镀锌工字钢厂家推荐:河南北岸金属材料全系钢材供应 - 品牌推荐官
  • Meshroom三维重建实战指南:从图像到模型的全流程解析
  • WarcraftHelper终极指南:5大核心功能让魔兽争霸3在现代系统完美运行
  • 抖音视频批量下载终极指南:4步快速掌握高效下载技巧
  • RAG技术
  • 告别B站千篇一律界面:BewlyBewly焕新定制方案提升浏览效率
  • OpenClaw 部署指南 (Linux)版本原始安装。
  • 如何通过Vial-QMK打造专属键盘体验:从入门到精通的个性化定制指南
  • MCP(Model Context Protocol):AI 应用的“USB-C 接口”
  • BDInfo:蓝光媒体技术解析的专业级引擎
  • 数据不出域,决策在边缘:2026年船舶专用边缘计算盒子推荐 - 品牌2026
  • TestDisk与PhotoRec技术架构深度解析:480+文件格式恢复机制与磁盘修复原理剖析
  • Windows风扇控制终极指南:用FanControl打造安静高效的电脑散热系统
  • 10分钟搭建企业级人脸识别系统:CompreFace零代码实战指南
  • 鸿蒙 HarmonyOS 4.0+ 音乐播放器企业级完整实现(后台播放 + 系统播控中心 + 全功能)
  • YimMenu功能增强指南:GTA V游戏体验优化实现方案
  • DXVK如何为老旧系统注入现代图形处理能力?
  • OpenClaw配置优化:GLM-4.7-Flash长文本处理性能提升30%
  • 基于ESP32与OneNET的微信小程序环境监测系统实战
  • 俄罗斯商品“通关密码”:诚信标签KIZ
  • 别再用串口打印了!用STM32F407驱动0.96寸OLED做个实时系统状态监视器(附源码)
  • 解决AOSP工程Android Studio打开卡顿
  • OpenCore Auxiliary Tools (OCAT):掌握黑苹果配置的终极图形化工具