2 条题解
-
0
满分代码:
#include <bits/stdc++.h> using namespace std; const int MAXN = (1 << 12) + 5; // 最大行数、列数上限:2^12 + 余量 int n, m; // 矩阵行数n,列数m long long bit[MAXN][MAXN]; // 二维树状数组,存储差分信息,1-based // lowbit:返回 x 的最低位 1 对应的值,用于 Fenwick Tree 跳跃 inline int lb(int x) { return x & -x; } // upd2:二维树状数组单点更新,在 (x,y) 位置增加 val // 名称长度 <=7 void upd2(int x, int y, long long val) { // 外层循环:对行进行跳跃更新 for (int i = x; i <= n; i += lb(i)) { // 内层循环:对列进行跳跃更新 for (int j = y; j <= m; j += lb(j)) { bit[i][j] += val; } } } // qry2:查询 (1,1) 到 (x,y) 矩形区域的前缀和 // 名称长度 <=7 long long qry2(int x, int y) { long long s = 0; // 外层循环:对行进行累加 for (int i = x; i > 0; i -= lb(i)) { // 内层循环:对列进行累加 for (int j = y; j > 0; j -= lb(j)) { s += bit[i][j]; } } return s; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); // 读入行数 n 和列数 m cin >> n >> m; // 初始化树状数组为 0 for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { bit[i][j] = 0; } } // 读取操作直到文件结束 // opType = 1 表示单点加操作,=2 表示子矩阵求和 int opType; while ( (cin >> opType) ) { if (opType == 1) { // 格式:1 x y k —— 在 A[x][y] 上增加 k int x, y; long long k; cin >> x >> y >> k; // 用 upd2 在 (x,y) 位置加上 k upd2(x, y, k); } else if (opType == 2) { // 格式:2 a b c d —— 查询子矩阵 (a,b) 到 (c,d) 的元素和 int a, b, c, d; cin >> a >> b >> c >> d; // 子矩阵和 = qry2(c,d) - qry2(a-1,d) - qry2(c,b-1) + qry2(a-1,b-1) long long ans = qry2(c, d) - qry2(a - 1, d) - qry2(c, b - 1) + qry2(a - 1, b - 1); cout << ans << "\n"; } // 其他 opType 不存在,直接忽略 } return 0; } -
0
#include<bits/stdc++.h> using namespace std; long long a[4097][4097]; int n,m; void Add(int x,int y,int p){ for(int i=x;i<=n;i+=i&(-i))for(int j=y;j<=m;j+=j&(-j))a[i][j]+=p; } long long Que(int x,int y){ long long res=0; for(int i=x;i;i-=i&(-i))for(int j=y;j;j-=j&(-j))res+=a[i][j]; return res; } int main(){ //freopen("test.in","r",stdin); scanf("%d%d",&n,&m);int op; while(scanf("%d",&op)!=EOF){ if(op-1){ int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); printf("%lld\n",Que(c,d)-Que(c,b-1)-Que(a-1,d)+Que(a-1,b-1)); } else{ int x,y,k; scanf("%d%d%d",&x,&y,&k); Add(x,y,k); } } return 0; }
- 1
信息
- ID
- 996
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 7
- 已通过
- 3
- 上传者