首页 > 编程语言 >基础算法模板之前缀和与差分

基础算法模板之前缀和与差分

时间:2023-03-17 20:13:45浏览次数:40  
标签:前缀 int 差分 y1 x2 y2 模板

前缀和

规定数列{\(a_i\)}的前缀和为\(S_i\) = \(\sum{_{k = 1}^i}a_k\),常用于使用o(1)的时间计算某段区间求和

// 一维前缀和
S[i] = S[i - 1] + a[i]; //前缀和初始化,i从1开始,S[0] = 0
S[r] - s[l - 1] = a[l] + a[l + 1] + ... + a[r]; //求[l,r]区间和

// 二维前缀和
S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + a[i][j];
// 以(x1,y1)为左上角,(x2,y2)为右下角的矩阵和
S = S[x2][y2] - S[x1 - 1][y2] - S[x2][y1 - 1] + S[x1 - 1][y1 - 1];

差分

差分与前缀和相对,很显然一个数列的差分数组的前缀和数组是原数组,差分数组经常用于使用o(1)的时间对某一段区间上的所有数加上一个数c

// 一维差分
// 差分数组的构造
for(int i = 0;i < n;i ++ ) insert(i,i,a[i]) // 将初始值均为0的差分数组各个位置上插入对应的a[i]之后,该差分数组就变成了数组a的差分数组了

// 在(l,r)区间上加上c
void insert(int l,int r,int c)
{
	b[l] += c,b[r + 1] -= c;
}

// 二维差分
// 差分数组的构造;
for(int i = 0;i < n;i ++ )
    for(int j = 0;j < m;j ++ )
        insert(i,j,i,j,a[i]);
// 在以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵上的每个数上加c
void insert(int x1,int y1,int x2,int y2,int c) 
{
    b[x1][y1] += c;
    b[x1][y2 + 1] -= c;
    b[x2 + 1][y1] -= c;
    b[x2 + 1][y2 + 1] += c;
}

标签:前缀,int,差分,y1,x2,y2,模板
From: https://www.cnblogs.com/zhiao/p/17228000.html

相关文章

  • 前缀和
        #include<bits/stdc++.h>usingnamespacestd;intn,m; intl,r;constintN=1e5+10;inta[N];intmain(){cin>>n>>m;for(inti=1;i<=n;i++){cin>>a......
  • .net6 使用iTextSharp操作PDF模板
       一、首先要通过Adobe制作好PDF模板,目前发现只能通过这个工具才能制作PDF模板Adobe自己去官网下载,不过官网是要订阅的。或者自己去找破解版也行;下载后废话不多......
  • 设计模式5——模板方法模式
    1、定义模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。2、核心在抽象父类中封装子类的算法框架,它的init方法可作为一个算法的模板,指导子......
  • 基础算法模板之二分
    二分1.算法分析对于一个有序的序列,在查找某个值时可以优先考虑中间值与待查找值的关系来缩减查找范围,每次可以缩减一半,因此称为二分。由于每次处理的数据量变为原来的......
  • 基础算法模板之归并排序
    归并排序1.算法分析归并排序是分治的思想,将一个序列分为多个子序列,先让每个子序列有序,再合并已有序的子序列。把长度为n的输入序列分成两个长度为n/2的子序列;对这两个......
  • 基本算法模板之快速排序
    快速排序1.算法描述从数列中挑出一个元素,称为"基准";重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这......
  • 泛型对象的应用:常规业务逻辑模板化,使用通用的父类来定义字段,具体字段由实现类来赋予数
    泛型对象的应用:常规业务逻辑模板化,使用通用的父类来定义字段,具体字段由实现类来赋予数据//DEMO-1publicinterfaceCommonTemplateService<T,F>{publicTbuildCa......
  • 【设计模式】模板方法
    1.模板方法(TemplateMethod)的定义模板方法模式是一种行为设计模式,它在超类中定义一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。模板是对多种事物的结......
  • MasaFramework入门第二篇,安装MasaFramework了解各个模板
    安装MasaFramework模板执行以下命令安装最新Masa的模板dotnetnew--installMasa.Template安装完成将出现四个模板MasaBlazorApp:MasaBlazorApp的模板创建的是......
  • 【小哥132】设置物理规则-调取规则power Netclass(网络组)-创建差分对-间距规则-区域规
    设置物理规则:线宽,差分对间距,过孔(默认过孔为顶部那个,使用其他过孔需要在走线过程中option调取其他过孔)默认是单根走线线宽的规则      调取规则powerNetcl......