RT。全部MLE。
import java.io.*;
import java.util.*;
public class Main {
static class TreeArr {
private long[][][] t;
private int n, m;
public TreeArr(int n, int m) {
this.n = n;
this.m = m;
this.t = new long[n + 10][m + 10][110];
}
private int lowbit(int x) {
return x & (-x);
}
public void add(int x, int y, int num, int k) {
for (int i = x; i <= n; i += lowbit(i)) {
for (int j = y; j <= m; j += lowbit(j)) {
t[i][j][num] += k;
}
}
}
private long query(int x, int y, int num) {
long ans = 0;
for (int i = x; i > 0; i -= lowbit(i)) {
for (int j = y; j > 0; j -= lowbit(j)) {
ans += t[i][j][num];
}
}
return ans;
}
public long queryarr(int x, int xx, int y, int yy, int num) {
long ans = 0;
ans =
query(xx, yy, num)
- query(xx, y - 1, num)
- query(x - 1, yy, num)
+ query(x - 1, y - 1, num);
return ans;
}
}
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
int n, m;
n = cin.nextInt();
m = cin.nextInt();
int[][] a = new int[n + 10][m + 10];
TreeArr T = new TreeArr(n, m);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
a[i][j] = cin.nextInt();
T.add(i, j, a[i][j], 1);
}
}
int q = cin.nextInt();
for (int i = 1; i <= q; i++) {
int opt = cin.nextInt();
if (opt == 1) {
int x = cin.nextInt(), y = cin.nextInt(), k = cin.nextInt();
T.add(x, y, a[x][y], -1);
a[x][y] = k;
T.add(x, y, k, 1);
} else {
int x = cin.nextInt(),
xx = cin.nextInt(),
y = cin.nextInt(),
yy = cin.nextInt(),
k = cin.nextInt();
long ans = T.queryarr(x, xx, y, yy, k);
System.out.println(ans);
}
}
}
}
,,,
注:用 java 写的,初学 java,它是不是因为有什么内存浪费之类的的东西会导致MLE?QWQ