关于我转生成为差分矩阵这件事

题目详细:

关于我转生成为差分矩阵这件事_第1张图片

思路:

经典板子题

主要要掌握的点:

  1. 差分数组进行前缀和后就会得到原数组

  1. 对于差分数组来说,如果b[x][y]+=c的话,那么对于原数组中所有a[i][j]下标,i>=x并且j>=y的元素都会加上c

  1. 对于二维前缀和需要进行的操作

  1. 对于差分数组区间加上c需要进行的操作

代码详解:

#include
#include
#include
#include

using namespace std;

const int N=1e3+6;

int a[N][N],b[N][N];
int x1,x2,yyy1,y2,n,m,q,c;



int main(){
    scanf("%d%d%d",&n,&m,&q);
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
            
    while(q--){//对于区间加上c需要进行的操作
        scanf("%d%d%d%d%d",&x1,&yyy1,&x2,&y2,&c);
        
        b[x1][yyy1]+=c;
        b[x1][y2+1]-=c;
        b[x2+1][yyy1]-=c;
        b[x2+1][y2+1]+=c;
    }
    
    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];
            printf("%d ",b[i][j]+a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

PS:

远梦归侵晓,家书到隔年。沧江好烟月,门系钓鱼船。

你可能感兴趣的:(每日一题分享,算法,差分)