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}$

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

  • 相关阅读:
    贝叶斯推断祭
    libstdc和glibc的一些共享库问题
    nf_conntrack之解决方案
    Too many open files 问题
    Centos系统 上下文切换的检查思路
    GPS坐标转大地坐标
    【转】关于IAP与APP互相跳转的实现
    stm32定时器计数功能
    C库函数——字符串转数字整理
    【转】sscanf函数用法实例
  • 原文地址:https://www.cnblogs.com/soledadstar/p/11600711.html
Copyright © 2011-2022 走看看