二维数组差分
理解
题目 798
代码没有通过, 超时了, 是不是输入太慢的问题?
代码
import java.util.Scanner;
public class Main {
private static int N = 1010;
private static int[][] b;
public static void main(String[] args) {
// 输入数据初始化
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int q = in.nextInt();
b = new int[N][N];
int[][] arr = new int[N][N];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
arr[i][j] = in.nextInt();
// 打印输入二维数组
// printArr(arr, n, m);
// 插入数组
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
insert(i, j, i, j, arr[i][j]);
// 循环插入
while (q-- > 0) {
int x1 = in.nextInt();
int y1 = in.nextInt();
int x2 = in.nextInt();
int y2 = in.nextInt();
int c = in.nextInt();
// 插入操作, 对 b[n]造成影响
insert(x1, y1, x2, y2, c);
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
// 理解理解
arr[i][j] = arr[i - 1][j] + arr[i][j - 1] - arr[i - 1][j - 1] + b[i][j];
// 打印结果
printArr(arr, n, m);
}
// 进行插入操作
private static void insert(int x1, int y1, int x2, int y2, int c) {
b[x1][y1] += c;
b[x1][y2 + 1] -= c;
b[x2 + 1][y1] -= c;
b[x2 + 1][y2 + 1] += c;
}
// 打印二维数组
private static void printArr(int[][] arr, int n, int m) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
BufferedReader & BufferedWriter AC
我的只能过60 感觉对JAVA不是很友好
StreamTokenizer and PrintWriter still TLE