zoukankan      html  css  js  c++  java
  • 差分数组

    一、定义:对于n个元素的数组a,建立记录它每一项与前一项差值的差分数组d,d[i]=a[i]-a[i-1],特别的:d[0]=a[0]-0=a[0];

    二、简单性质:

      1.计算数列a各项的值, a[i]=d[i]的前缀和。

      2.计算数列a各项的前缀和,

      令数列a的第x项的前缀和为sum[x];

      因为

        sum[x]=∑(i=1:x)a[i];

        a[i]=∑(j=1:x)d[i];

      所以

        sum[x]=∑(i=1:x)(x-i+1)d[i]; 

    三、用途:

      1.快速处理区间加减操作:

      对数列区间[L,R]中的每个数加上x,我们通过性质(1)知道,第一个受影响的差分数组中的元素为d[L],即令d[L]+=x,那么后面数列元素在计算过程中都会加上x;

      最后一个受影响的差分数组中的元素为d[R],所以令d[R+1]-=x,即可保证不会影响到R以后数列元素的计算。

      这样我们不必对区间内每一个数进行处理,只需处理两个差分后的数即可;

      2.询问区间和问题:

      由性质(2)我们可以计算出数列各项的前缀和数组sum各项的值;那么显然,区间[L,R]的和即为ans=sum[R]-sum[L-1];

  • 相关阅读:
    Clouds
    docs
    虚拟化监控问题
    Openstack Ceilometer监控项扩展
    openStack ceilometer API
    sql分级汇总
    【Android归纳】阿里笔试题之Android网络优化
    享元模式
    【Hibernate步步为营】--核心对象+持久对象全析(三)
    Linux经常使用命令(三)
  • 原文地址:https://www.cnblogs.com/lihahahahaji/p/13938938.html
Copyright © 2011-2022 走看看