zoukankan      html  css  js  c++  java
  • 基础算法--差分,二维差分

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

    差分是前缀和的逆操作

    差分没有必要关注差分的构造,因为你写好了插入函数的话,对[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;
    }
  • 相关阅读:
    学习手机安全卫士项目源码记录(一)
    AIDL Service
    让一个Activity在开机后自动显示
    如何拦截手机屏幕休眠和唤醒动作
    润前报表简单问题
    javaEE框架的session获取
    UEditer使用
    jQuery动态绑定生成的元素
    javadoc 生成乱码
    个人异常收集_SE_EE_WEB...
  • 原文地址:https://www.cnblogs.com/greenofyu/p/13802627.html
Copyright © 2011-2022 走看看