18439二维前缀和
⭐️难度:中等
📖
📚
import java.util.Scanner;
public class Main {
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[1010][1010];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
a[i][j] = scanner.nextInt();
}
}
// 构造前缀和数组
int[][] s = new int[1010][1010];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
s[i][j] = a[i][j] + s[i-1][j] + s[i][j-1] -s[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 sum = s[x2][y2] - s[x2][y1-1] - s[x1-1][y2] + s[x1-1][y1-1];
System.out.println(sum);
}
}
}
🍎
记住公式,然后直接套用就行