zoukankan      html  css  js  c++  java
  • 一二维前缀和及差分(算法描述)

    基本描述:

    一维:

    前缀和:结合数组前n项和理解

    
        sn[0]=an[0];
        for(int i=1;i<longth;i++)//初始化
            sn[i]=an[i]+sn[i-1];

    差分:

    多次给定[l,r],标记l和r范围

    令an[l]+k

     an[r+]-r

    多次操作后,利用辅助数组sn求an的前缀和即可得到标记的数组

    二维:

    前缀和:结合面积理解

    #include <iostream>
    using namespace std;
    int an[10][10],sum[10][10]={0};
    int main ()
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)//输入
            for(int j=1;j<=m;j++)
                cin>>an[i][j];
        for(int i=1;i<=n;i++)//初始化
            for(int j=1;j<=m;j++)//为避免j-1,i-1越界,不使用最外边那一行,令其初始化为0:
                sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+an[i][j];//粉红色框定的面积等于红色框定的面积+绿色框定的面积-蓝色框定的面积+粉红的所处的点对应小框面积
            for(int i=0;i<=n;i++)
            {
                for(int j=0;j<=m;j++)
                cout<<sum[i][j]<<' ';
                cout<<endl;
            }
    
        return 0;
    }

     

    差分:

    标记:an[左上]+=k;an[右下+1]+=k;an[右上+1]-=k;an[左下+1]-=k;达到标记的目的;

     主要用处:

    前缀和:多次询问区间和,

    差分:标记一维区间或者二维区间

  • 相关阅读:
    路由策略
    ospf 路由汇总
    OSPF type1 2
    ospf
    TCP 六种标识位
    raid 10 与 01
    SNMP协议
    ffmpeg剪切视频
    ubuntu18安装sbt
    服务器Ubuntu18重启后宝塔访问不了
  • 原文地址:https://www.cnblogs.com/zwx7616/p/10735821.html
Copyright © 2011-2022 走看看