差分矩阵_java


import java.util.*;

public class Main{
    private static int N=1010;
    private static int[][] res=new int[N][N];
    private static int[][] temp=new int[N][N];
    
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt(), m=in.nextInt();
        int q=in.nextInt();
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                res[i][j]=in.nextInt();
                insert(i,j,i,j,res[i][j]);
            }
        }
        while(q-->0){
            int x1=in.nextInt(), y1=in.nextInt(), x2=in.nextInt(), y2=in.nextInt(), c=in.nextInt();
            insert(x1,y1,x2,y2,c);
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                temp[i][j]+=temp[i][j-1]+temp[i-1][j]-temp[i-1][j-1];
                System.out.printf("%d ",temp[i][j]);
            }
            System.out.println("");
        }
    }
    
    public static void insert(int x1,int y1,int x2,int y2,int c){
        temp[x1][y1]+=c;
        temp[x2+1][y2+1]+=c;
        temp[x2+1][y1]-=c;
        temp[x1][y2+1]-=c;
    }
}