二维差分数组(JAVA)蓝桥杯

二维差分数组可以根据二维前缀和数组移项得到,对二维差分数组b[i][j]加或者减去一个数,就意味着计算二维前缀和数组后的原数组从这个点开始到最后一个点的矩形都加上或者减去这个数。所以可以根据上面的计算。

java 复制代码
package com.js.datastructure.recursion.蓝桥;

import java.util.Scanner;

public class 二维差分 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int q = scanner.nextInt();

        int[][] a = new int[n+2][m+2];
        //操作完成后可以直接在差分数组上求前缀和
        int[][] b = new int[n+2][m+2];

        //计算差分数组
        for (int i = 1; i < n+1; i++) {
            for (int j = 1; j < m+1; j++) {
                a[i][j] = scanner.nextInt();
                b[i][j] = a[i][j] - a[i-1][j] - a[i][j-1] + a[i-1][j-1];
            }
        }

        //进行操作
        for (int i = 0; i < q; i++) {
            int x1 = scanner.nextInt();
            int y1 = scanner.nextInt();
            int x2 = scanner.nextInt();
            int y2 = scanner.nextInt();
            int d = scanner.nextInt();
            b[x1][y1] += d;
            b[x2+1][y1] -= d;
            b[x1][y2+1] -= d;
            b[x2+1][y2+1] += d;
        }

        //计算前缀和并输出原数组
        for (int i = 1; i < n+1; i++) {
            for (int j = 1; j < m+1; j++) {
                b[i][j] = b[i][j] + b[i-1][j] + b[i][j-1] - b[i-1][j-1];
                System.out.print(b[i][j] + " ");
            }
            System.out.println();
        }
    }
}
相关推荐
凢en6 分钟前
Perl——qw()函数
开发语言·perl
郝学胜-神的一滴13 分钟前
基于C++的词法分析器:使用正则表达式的实现
开发语言·c++·程序人生·正则表达式·stl
还是鼠鼠31 分钟前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
Xiaokai丶1 小时前
Java 8 新特性深度剖析:核心要点与代码实战
java
灵魂猎手1 小时前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
Galaxy在掘金1 小时前
从业8年,谈谈我认知的后端架构之路-1
java·架构
努力努力再努力wz2 小时前
【c++深入系列】:万字详解模版(下)
java·c++·redis
林开落L2 小时前
库的制作与原理
linux·开发语言·动静态库·库的制作
m0_480502642 小时前
Rust 入门 泛型和特征-特征对象 (十四)
开发语言·后端·rust
瓦特what?3 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘