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

    前缀和与差分比较常用,也算是必须掌握的方法。主要用于对区间数据的查询处理。

    在一维当中,前缀和就是指从某个元素开始一直到首个元素的和,差分是指每个元素与前一元素的差(首个元素即为本身)。

    在二维里面,设一个N*M的矩阵,起点(左上角)为(1,1),终点右下角为(N,M)。则(i,j)的前缀和为以(1,1)为起点,以(i,j)为终点的矩形内所有元素的和;(i,j)的差分则是(i,j)-(i,j-1)-(i-1,j)+(i-1,j-1)。

    比较有意思的是前缀和的差分和差分的前缀和即为各个元素。

    前缀和主要用于区间求和,初始化复杂度为O(n),每次查询仅为O(1)。差分主要用于区间增加和单点查询,区间增加复杂度仅为O(1),单点查询相当于求差分数组的前缀和,复杂度为O(n)。区间增加,对于一维来说,要给[i,j]这个区间的每个元素加x,只需要令pre[i]+=x,pre[j+1]-=x即可(pre就是差分数组)。对于二维来说,要将(i,j,k,l)这个矩形内的每个元素都加x,则令pre[i,j]+=x,pre[i,l+1]-=x,pre[k+1,j]-=x,pre[k+1,l+1]+=x。

    前缀和与差分一般并不单独考察,而是作为一种数据处理方式与其他知识点一起考察。

    比如NOIP2012 借教室:https://www.luogu.org/problemnew/show/P1083

  • 相关阅读:
    CSS笔记
    EasyUI笔记
    EasyUI treegrid 获取编辑状态中某字段的值 [getEditor方法获取不到editor]
    2019.10.12解题报告
    %lld 和 %I64d
    关于kmp算法
    洛谷p2370yyy2015c01的U盘题解
    About me & 友链
    关于Tarjan
    洛谷p3398仓鼠找suger题解
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/9382597.html
Copyright © 2011-2022 走看看