首页 > 其他分享 >二阶前缀和和二阶差分

二阶前缀和和二阶差分

时间:2023-10-15 10:33:06浏览次数:39  
标签:前缀 sum 差分 二阶 数组 等差数列

马上就要csps 了还啥也不会,真就是酸菜鱼了。

定义

二阶差分就是在差分数组的基础上再做一次差分。

举个很板的栗子就是对一个序列进行一个等差数列式的一个减法,这个时候我们可以通过二阶差分,在 \(O(1)\) 的复杂度进行修改,之后就是 \(O(n)\) 的二维前缀和,就可以维护出来我们的一个序列了(至于比较灵活的应用还不会,等我会了upd,或者就是等我退役了直接再等 \(\infty\) 年更新)

例题

T1

三步必杀

这个题目就是我上面说的等差数列维护就好了,很板的一道题。(

这个题目可以推出来,我们在维护二维差分数组的时候,我们进行的单点 修改应该是这样的:

记 \(c_1\) 为修改时候的等差数列的第一项,\(d\) 为等差数列的公差,\(c_m\) 为等差数列的 末项,\(l\) 为等差数列修改的左边界,\(r\) 为等差数列的右边界,\(d\)为我们的二维差分数组 。

我们修改的地方就应该为

\[d[l] \gets d[l] + c_1 \]

\[d[l+1] \gets d[l + 1] + d - c_1 \]

\[d[r+1] \gets d[r + 1] - d - c_m \]

\[d[r + 2] \gets d[r + 2] + e \]

T2

P1438

这个题目其实也是和上面的题目一样,但是我们需要考虑在修改的同时维护一个前缀和,不难想到用树状数组来进行维护(树状数组又好写,又常数小,谁不爱用呢 )。由于我们对原数组进行了差分,所以我们求一个位置的时候应该是求这个位置的二阶前缀和,然后我们在修改的时候是进行四次单点修改(修改位置同上)。下面我们就要推式子然后看我们树状数组是要维护什么:

记 \(d\) 为一阶差分序列,\(d'\) 为二阶差分序列。

\[\begin{aligned} a _ i &= \sum _ {j = 1} ^ i d _ i \\ &= \sum _ {j = 1} ^ i \sum _ {k = 1} ^ j d' _ k \\ &= \sum _ {j=1} ^ i (i - j + 1) d' _ j \\ &= (i + 1)\sum _ {j = 1} ^ i d' _ j - \sum _ {j = 1} ^ i j \times d' _ j\end{aligned} \]

这个时候我们就知道我们需要通过树状数组维护两个东西:一个是 \(d' _ i\)的前缀和,另一个是 \(j \times d' _ j\) 的一个前缀和。

啥时候才能不用学知识的菜鱼啊

标签:前缀,sum,差分,二阶,数组,等差数列
From: https://www.cnblogs.com/carp-oier/p/17765322.html

相关文章

  • 14.最长公共前缀
    1.题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入:strs=["flower","flow","flight"]输出:"fl"示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。......
  • 差分约束
    差分约束前言又是20231012联考T4考到。。。于是不会,前面的题也没有补,开始学习!定义差分约束是什么,看起来和图论没有一点关系。。。差分约束系统是一种特殊的\(n\)元一次不等式组,\(n\)个变量\(x_1,x_2,\dots,x_n\),和\(m\)个约束条件,每个条件都是形如\(x_i-x_j\le......
  • Day2 前缀和 差分 双指针
    前缀和LuoguP2004领地选择二维前缀和板题,注意开longlong#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;intn,m,c,x,y;longlongans,a[1005][1005],s[1005][1005];intmain(){ scanf("%d%d%d",&n......
  • Laravel 设置表前缀
    Laravel是一个流行的PHP框架,被广泛地应用在Web应用程序的开发中。在Laravel中,我们可以非常方便地操作数据库,不仅支持多种类型的数据库,还提供了丰富的ORM实现,比如EloquentORM,使得我们可以非常高效地与数据库进行交互。在一些情况下,我们可能需要给Laravel的表添加一些......
  • Trie-前缀查询
    Tire专门为处理字符串设计的。平衡二叉树,查询复杂度是O(logn)但是100万个条目,2^20,logn大约20.但是Tire的复杂度,和字段中一共有多少条目无关!世间复杂度为O(w),w为查询单词的长度大多数的单词长度小于10图示整个字符串以字母为单位拆开cat、dog、deer、panda 可以看出每......
  • 6577: 暗的连锁 LCA+树上差分
    描述  Dark是一张无向图,图中有N个节点和两类边,一类边被称为主要边,而另一类被称为附加边。Dark有N–1条主要边,并且Dark的任意两个节点之间都存在一条只由主要边构成的路径。另外,Dark还有M条附加边。你的任务是把Dark斩为不连通的两部分。一开始Dark的附加边......
  • Python word'str'(字符串前缀string prefix)的种类
    Python字符串前缀(Stringprefix) r'string'r'',用法是不会对后方字符串中的转义符进行转义,如: str=r'\n'print(str)#会直接输出\n,并不会输出换行 f'string'f'',用法是对字符进行格式化就和str.format()一样,会对{}进行格式化,如: str=f'你好,{}'......
  • MySQL进阶篇:第四章_四.一_ 索引使用_最左前缀法则
    索引使用_最左前缀法则最左前缀法则如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。以tb_user表为例,我们先来查看一下之前tb_user表所创建的索引。在......
  • Conveyor (CF E) (dp 差分/前缀 条件迷惑t)
     思路: 找各种性质1每一秒只有史莱姆进入起始点,然后他会选一个方向走(右或者下),每一秒史莱姆都会这样走在考虑前t秒内有S个史莱姆到达这个点,然后就会有s+1/2个往右走,s/2往下走而且问t秒只会有t-n-m-1秒后的时刻影响(诈骗t)于是利用dp+差......
  • P5960 差分约束
    原题曾经会过对于\(x_i-x_j\leqk\),我们发现长得很像最短路/最长路的形式,因此我们可以抽象建图建一个超级源点连向所有点,从超级原点跑最短路算法,跑出来的\(dis_i\)即对应\(x_i\)的一个解前文提到过,差分约束问题可以转化为最短路或最长路问题,所以两种转化也就形成了两......