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

呼市建设委员会网站每天三分钟新闻天下事

呼市建设委员会网站,每天三分钟新闻天下事,网站帮助,大连网络营销公司排名2025 - 03 - 08 - 第 71 篇 Author: 郑龙浩 / 仟濹 【二维差分】 文章目录 前缀和与差分 - 我的博客差分(二维)1 大体思路 | 一些区间加某数的最终结果2 二维差分原理3 例题 前缀和与差分 - 我的博客 一维前缀和 【算法 C/C】一维前缀和 一维差分 【算法 C/C】一维差分 二维前…

2025 - 03 - 08 - 第 71 篇
Author: 郑龙浩 / 仟濹
【二维差分】

文章目录

  • 前缀和与差分 - 我的博客
  • 差分(二维)
    • 1 大体思路 | 一些区间加某数的最终结果
    • 2 二维差分原理
    • 3 例题

前缀和与差分 - 我的博客

一维前缀和
【算法 C/C++】一维前缀和
一维差分
【算法 C/C++】一维差分
二维前缀和
【算法 C/C++】二维前缀和
二维差分
【算法 C/C++】二维差分

差分(二维)

回顾一下一维差分的用法,通过打标记,将前面的标记带到后边去

1 大体思路 | 一些区间加某数的最终结果

二维差分和一维差分有些许的相同,都是

  • 进行差分标记 - 记录区间边界以及在边界位置使用某种方法记录增量
  • 然后进行前缀和计算,得出每个元素的的增量为多少
  • 将原数组与增量差分数组进行一对一的结合,得出增量以后的结果

2 二维差分原理

前面学了 一维前缀和,一维差分,二维前缀和,已经有了基础,二维差分原理就不写那么具体了。

总之还是确定边界,即如何进行二维差分标记,之前一维差分标记是每个区间有两个标记

假设 {x1, y1}{x2, y2} + value

d[x1][y1] += value;
d[x2 + 1][y1] -= value;
d[x1][y2 + 1] -= value;
d[x2 - 1][y2 - 1] += value;

四个标记点的意义

  • 起点标记 d[x1][y1] += value
    从该点开始影响整个后续区域
  • 右界限制 d[x1][y2+1] -= value
    消除右侧超出 y2 列的增量
  • 下界限制 d[x2+1][y1] -= value
    消除下方超出 x2 行的增量
  • 交叉修正 d[x2+1][y2+1] += value
    补回右侧和下侧重复抵消的部分

3 例题

题目

有一个 3*4 的矩阵 arr[N][M]

{1, 5, 6, 8,9, 6, 7, 3,5, 3, 2, 4}

(0, 0)(2, 1) +3
(1, 1)(2, 2) -1

//答案应为
4  8  6  8
12 8  6  3
8  5  1  4

代码:

// Author: 郑龙浩/仟濹
// Time: 2025-03-08
// [二维差分 二维前缀和]
// **题目**
// 有一个 3*4 的矩阵 `arr[N][M]`
// ```cpp
// {1, 5, 6, 8,
//  9, 6, 7, 3,
//  5, 3, 2, 4}
// ```
// 求  `(0, 0)` 到 `(2, 1)` `+3`
// 求  `(1, 1)` 到 `(2, 2)` `-1`
// ```cpp
// //答案应为
// 4  8  6  8
// 12 8  6  3
// 8  5  1  4
// ```
#include <bits/stdc++.h>
using namespace std;
#define N 3
#define M 4
int arr[N][M] = {1, 5, 6, 8,9, 6, 7, 3,5, 3, 2, 4};
int d[N + 1][M + 1] = {0}; // 增量差分数组// 二维差分数组 - 计算区间边界,并进行差分标记
void d_add(int x1, int y1, int x2, int y2, int value);
// 打印二维数组
void myPrint(int arr[][M]);
int main( void ){// 差分数组 - 计算区间边界,并进行标记d_add(0, 0, 2, 1, 3);d_add(1, 1, 2, 2, -1);// 进行二维前缀和操作// 前缀和以后,就得出了二维矩阵中每个元素的增量应该为多少// 计算列的前缀和for (int i = 1; i <= N; i++) d[i][0] += d[i - 1][0];// 计算行的前缀和for (int i = 1; i <= M; i++) d[0][i] += d[0][i - 1];// 计算全部前缀和for (int i = 1; i < N; i++)for ( int j = 1; j < M; j ++ ){d[i][j] = d[i - 1][j] + d[i][j - 1] + d[i][j] - d[i - 1][j - 1];}// 将两个数组中的元素尽心合并// arr数组中的每个元素加上增量for (int i = 0; i < N; i++)for (int j = 0; j < M; j++)arr[i][j] += d[i][j];// 打印数组 - 打印最终结果myPrint( arr );return 0;
}// 二维差分数组 - 计算区间边界,并进行差分标记
void d_add(int x1, int y1, int x2, int y2, int value){d[x1][y1] += value;d[x2 + 1][y1] -= value;d[x1][y2 + 1] -= value;d[x2 + 1][y2 + 1] += value; // 将多减去的部分加上
}// 打印二维数组
void myPrint(int arr[][M]){for (int i = 0; i < N; i++){for (int j = 0; j < M; j++)printf ("%-3d", arr[i][j]);cout << endl;}
}
http://www.cadmedia.cn/news/3789.html

相关文章:

  • 网站公安备案怎么操作廊坊seo优化
  • 北京做网站建设多少钱郑州谷歌优化外包
  • 临沂集团网站建设seo第三方点击软件
  • 中软属于国企还是央企seo研究中心
  • 金坛建设银行总行网站做市场推广应该掌握什么技巧
  • 哪个兄弟来个直接看的网站谷歌play
  • 武汉网站建设 乐云seo购买网站域名
  • 网站运营内容方案网站优化网络推广seo
  • 山西做网站哪个好凡科建站官网
  • 东莞教育团购网站建设微信公众号推广网站
  • 陕西印象传媒投资集团有限公司seo薪酬如何
  • 大兴网站开发网站建设推广哪个app最挣钱
  • 营销型网站建设工资app注册推广拉人
  • 淮安住房和城乡建设厅网站济南优化网页
  • 内蒙古建设网站解释seo网站推广
  • 网站建设 广告推广百度seo引流怎么做
  • 大型网络建站公司php搭建一个简单的网站
  • 北京企业网站建设推荐win7优化大师官方网站
  • 旅游网站内容规划特点seo是指
  • 如何做网站解析怎样去推广自己的网店
  • 广州易网外贸网站建设seo快速优化方法
  • 咸宁网站建设报价最新新闻热点事件2023
  • 企业手机网站建设讯息如何自己开网站
  • 分析可口可乐网站建设的目的百度搜索引擎关键词优化
  • 宝塔自助建站系统源码深圳网络推广怎么做
  • 建设规划委员会网站注册网站在哪里注册
  • 网站建设提问宁波seo教程行业推广
  • 外包活一般是怎么接的佛山旺道seo优化
  • 标准件网站开发百度在线识别图片
  • 做交易网站深圳网站关键词优化推广