题解 | 【模板】二维前缀和
【模板】二维前缀和
https://www.nowcoder.com/practice/99eb8040d116414ea3296467ce81cbbc
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 import java.util.Scanner; public class Main { public static void main(String[] args) { //1.处理输入 Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(),m=scanner.nextInt(),q=scanner.nextInt(); long[][] arr=new long[n+1][m+1]; for (int i = 1; i <n+1; i++) { for (int j = 1; j <m+1; j++) { arr[i][j]=scanner.nextLong(); } } //2.创建dp数组表示前缀和矩阵 long[][] dp=new long[n+1][m+1]; for (int i = 1; i <n+1; i++) { for(int j=1;j<m+1;j++) { dp[i][j]=dp[i-1][j]+dp[i][j-1]+arr[i][j]-dp[i-1][j-1]; } } //3.使用前缀和矩阵来求和 while(q>0) { int x1=scanner.nextInt(),y1=scanner.nextInt(),x2=scanner.nextInt(),y2=scanner.nextInt(); System.out.println(dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1]); q--; } scanner.close(); } }