首页 > 其他分享 >前缀和 & 差分

前缀和 & 差分

时间:2024-07-16 23:55:29浏览次数:14  
标签:y2 前缀 差分 数组 y1 x1

前缀和

一维前缀和

一维前缀和主要用于计算任意区间的元素和。

计算前缀和

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

计算区间[l, r]的元素和

s = sum[r] - sum[l - 1];  

二维前缀和

二维前缀和是一种用于快速计算二维数组中任意子矩阵元素之和。

// 计算矩阵的前缀和
s[x][y] = s[x - 1][y] + s[x][y - 1] - s[x - 1][y - 1] + a[x][y]
// 计算子矩阵的和
sum = s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]

主要计算公式有以上两种,计算矩阵的前缀和即计算左图中所有有颜色区域,其中s[x - 1][y]是红加绿色区域,s[x][y - 1]是黄加绿色区域;计算子矩阵的和即计算右图中蓝紫色区域。

差分

一维差分

一维差分是与一维前缀和紧密相关,它主要用于对数组进行区间更新操作,如需要对某个区间内的所有元素进行相同的增加或减少操作。
假设原数组为 \(a\), 差分数组为 \(b\)。

  • 构造差分数组

\(b[1] = a[1]\)
\(b[2] = a[2] - a[1]\)
……
\(b[i] = a[i] - a[i - 1]\)
……
\(b[n] = a[n] - a[n - 1]\)

  • 区间更新操作
// 对区间 [l, r] 进行加 c
b[l] =+ c;
b[r + 1] -= c;
  • 数组恢复
    在对差分数组 \(b\) 进行了一系列区间更新操作后,通过计算前缀和来恢复原数组 \(a\),即 \(a[i] = a[i − 1] + b[i]\)。

二维差分

二维差分,类似于一维差分,是一个二维数组的子矩阵进行统一的增加或减少操作。

假设原数组为 \(a\), 差分数组为 \(b\)。
对上图中的绿色区域加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;
}

insert(i, j, i, j, a[i][j]);      // 记得构建差分数组

insert(x1, y1, x2, y2, c);        // 差分数组加c

恢复原数组操作与二维前缀和类似

a[i][j] = b[i][j] + a[i − 1][j] + a[i][j − 1] − a[i − 1][j − 1]
//or 直接用b数组存储
b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1]

标签:y2,前缀,差分,数组,y1,x1
From: https://www.cnblogs.com/xggx/p/18306349

相关文章

  • 电工电子实验报告——差分放大器的测试方法
    差分放大器实验目的1.熟悉差动放大器电路的组成原理及用途;2.掌握差动放大器静态参数的测量方法;3.掌握差动放大器动态参数(差模放大倍数Aud,共模放大倍数Auc,共模抑制比KCMR)的测试方法:4.掌握带恒流源差动放大电路的调试方法。主要仪器设备及软件硬件:双踪示波器......
  • P9963前缀和_数学推导解法
    P9963前缀和数学推导解法\(\operatorname{E}{\sum\limits_{i=1}^n[l\ley_i\ler]}\\=\sum\limits_{i=1}^n\operatorname{E}[l\ley_i\ler]\\=\sum\limits_{i=1}^n\operatorname{E}[l\le\sum\limits_{j=1}^ix_j\ler]\\=\sum\limits_{i=1}^n\operatorna......
  • Equal Cut (AtCoder - arc100_b)(前缀和,思维)
    题目来源:https://atcoder.jp/contests/abc102/tasks/arc100_b?lang=en//题意:将一串数字分为四段,求出每段的总和,怎么分,才能让这四段的各自总和的极差最小?//思路:“实在是想不出来好的算法,只会暴力,当时想的枚举中间的那一刀,然后左右二分,但是感觉也不太好写,毕竟我总是被二分的边界......
  • 最大值(前缀和)
    第1题   最大值 查看测评数据信息在一个遥远的星球上,有n个特殊的饮水器,它们按照从1到n的顺序排列。每个饮水器都有一个内置的储水罐,初始时第i个饮水器的储水罐中有A[i]单位的水。这个星球的居民有一种特殊的能力,他们可以进行不超过k次的水流转移操作。每次操......
  • 改进的多目标差分进化算法在电力系统环境经济调度中的应用(Python代码实现)【电气期刊论
     目录 1电力系统环境经济调度数学模型电力系统环境经济调度问题概述多目标差分进化算法的应用应用研究的意义2  改进的多目标差分进化算法3Python代码实现3.1结果3.2Python代码 4完整Python代码、数据下载   改进的多目标差分进化算法不仅可以应用......
  • 改进的多目标差分进化算法在电力系统环境经济调度中的应用(Python代码实现)【电气期刊论
     目录 1电力系统环境经济调度数学模型电力系统环境经济调度问题概述多目标差分进化算法的应用应用研究的意义2  改进的多目标差分进化算法3Python代码实现3.1结果3.2Python代码 4完整Python代码、数据下载   改进的多目标差分进化算法不仅可以应用......
  • 前缀和与差分
    前缀和与差分的联系前缀和与差分就是一个互逆的过程,前缀和数组反映了从头到i的差分数组的和,差分数组体现了前缀和数组相邻的变化量。矩阵前缀差分的理解可以根据矩形面积来理解前缀和#include<iostream>usingnamespacestd;constintN=1e5+10;intn,m;int......
  • 前缀和简析
    前缀和前置知识:\(\sum_{i=1}^{r}{a_i}=a_l+a_{l+1}+\dots+a_{r-1}+a_r\)考虑以下数组:\(i\)\(1\)\(2\)\(3\)\(a_I\)\(3\)\(5\)\(7\)如果我们要查询\(\sum_{i=1}^{2}{a_i}\),很显然可以得到\(\sum_{i=1}^{2}{a_i}=3+5=8\)。如果......
  • 差分离散化问题
    火烧赤壁题目背景曹操平定北方以后,公元208年,率领大军南下,进攻刘表。他的人马还没有到荆州,刘表已经病死。他的儿子刘琮听到曹军声势浩大,吓破了胆,先派人求降了。孙权任命周瑜为都督,拨给他三万水军,叫他同刘备协力抵抗曹操。隆冬的十一月,天气突然回暖,刮起了东南风。没想到东吴......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【前缀和/固定滑窗】2
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出说明解题思路贪心思想......