• 基础算法--差分,二维差分


    差分面向的问题是对于一段数组同时加上某个值的问题

    差分是前缀和的逆操作

    差分没有必要关注差分的构造,因为你写好了插入函数的话,对[i,i]区间插入a[i]就好了

     1 #include<iostream>
     2 using namespace std;
     3 int n,m;
     4 const int N=1e5+10;
     5 int a[N],b[N];
     6 void insert(int l,int r,int c){
     7     b[l]+=c;
     8     b[r+1]-=c;
     9 }
    10 int main(void){
    11     cin>>n>>m;
    12     for(int i=1;i<=n;i++){
    13         cin>>a[i];
    14     }
    15     for(int i=1;i<=n;i++){
    16         insert(i,i,a[i]);
    17     }
    18     while(m--){
    19         int l,r,c;
    20         cin>>l>>r>>c;
    21         insert(l,r,c);
    22     }
    23     for(int i=1;i<=n;i++){
    24         b[i]=b[i]+b[i-1];
    25         cout<<b[i]<<" ";
    26     }
    27     return 0;
    28 }
    #include<iostream>
    using namespace std;
    int n,m,q;
    const int N=1010;
    int a[N][N],b[N][N];
    void insert(int x1,int y1,int x2,int y2,int c){
        b[x1][y1]+=c;
        b[x2+1][y1]-=c;
        b[x1][y2+1]-=c;
        b[x2+1][y2+1]+=c;
    }
    int main(void){
        cin>>n>>m>>q;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                insert(i,j,i,j,a[i][j]);
            }
        }
        while(q--){
            int x1,y1,x2,y2,c;
            cin>>x1>>y1>>x2>>y2>>c;
            insert(x1,y1,x2,y2,c);
        }
        //从1,1做前缀和到i,j就是a[i][j]的值
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                b[i][j]=b[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];
                cout<<b[i][j]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    柠檬班软件测试就业班学习笔记持续更新
    linux练习题面试必备持续更新
    windows10 mysql5.7.23解压版安装教程
    2020 年最新:Maven无法使用阿里云仓库下载
    cd1101d 树形dp
    SemanticException [Error 10025]
    spark学习
    es学习
    nginx配置-线上服务器
    jdk、tomcat升级过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/greenofyu/p/13802627.html
Copyright © 2020-2023  润新知