zoukankan      html  css  js  c++  java
  • 差分、前缀

    差分与前缀

    定义一个序列$a$,它的差分序列为$b_n=a_n-a_{n-1}$(后向差分),前缀和序列为$b_n=b_{n-1}+a_n$,显然,差分与前缀和互为逆运算,这意味着,对差分序列求前缀和就是原序列;同理,对前缀和序列求差分也是原序列。

    重要结论

    1、如果有了前缀序列,我们就可以O(1)求出$[l,r]$的区间和等于$b_r-b_{l-1}$

    2、如果有了差分序列,对$[l,r]$区间加$d$就意味着$b_l+d,b_{r+1}-d$

    来看一道题:

    对于数列$a$,$Q$次形如$[l,r]$中所有的数$+d$的操作,最后输出改动后的数列

    如果你很巨,会树状数组或线段树,Orz

    我们仿照2操作,O(1)的时间内对差分序列做修改,因为差分与前缀和互为逆运算,对最后的差分序列做前缀就OK啦。

    不仅只能做加法,只要有逆运算的运算都可以差分与前缀和,比如前缀积(乘的逆运算是除)和异或(异或的逆运算是异或)差分。

    二维差分与前缀

    画个图推推就好了呀

    前缀矩阵$b_{i,j}=b_{i-1,j}+b_{i,j-1}-b_{i-1,j-1}+a_{i,j}$。

    对$(x_1,y_1)(x_2,y_2)$这个子矩阵$+d$即差分矩阵$b_{x_2,y_2}+d,b_{x_1-1,y_2}-d,b_{x_2,y_1-1}-d,b_{x_1-1,y_1-1}+d$

    对$(x_1,y_1)(x_2,y_2)$这个子矩阵即前缀矩阵$b_{x_2,y_2}-b_{x_1-1,y_2}-b_{x_2,y_1-1}+b_{x_1-1,y_1-1}$

    其余的:树状数组,树上差分

  • 相关阅读:
    RegExp正则表达式心得 1 -分解MIME格式
    转载:ASP.Net性能优化(作者:刘鉴平)
    asp.Net中的多文件上传[载]
    我做的程序
    C#代码执行者1.0
    wordwrap,wordbreak,whitespace,textoverflow的区别和用法[转]
    SQL里面Case的用法
    richTextBox中插入图片的方法
    关于CodeDom的测试
    关系数据库的索引技术
  • 原文地址:https://www.cnblogs.com/soledadstar/p/11600711.html
Copyright © 2011-2022 走看看