1 条题解
-
1
我们只要使用类似于树状数组套树状数组的数据结构维护就可以了。
#include <bits/stdc++.h> using namespace std; const int N = 310, M = 110; int tr[N][N][M]; void add(int x, int y, int c, int v) { x++, y++; while (x < N) { int by = y; while (y < N) { tr[x][y][c] += v; y += y & -y; } y = by; x += x & -x; } } int query(int x, int y, int c) { int sum = 0; x++, y++; while (x) { int by = y; while (y) { sum += tr[x][y][c]; y -= y & -y; } y = by; x -= x & -x; } return sum; } int n, m, q; int a[N][N]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> a[i][j]; add(i, j, a[i][j], 1); } } cin >> q; int opt, x1, y1, x2, y2, c; while (q--) { cin >> opt; if (opt == 1) { cin >> x1 >> y1 >> c; add(x1, y1, a[x1][y1], -1); add(x1, y1, c, 1); a[x1][y1] = c; } else { cin >> x1 >> x2 >> y1 >> y2 >> c; int ans = query(x2, y2, c) - query(x2, y1 - 1, c) - query(x1 - 1, y2, c) + query(x1 - 1, y1 - 1, c); cout << ans << '\n'; } } return 0; }
- 1
信息
- ID
- 2986
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者