2 条题解
-
0
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=(1<<12)+10; int n,m;LL s[N][N]; void add(int x,int y,int k) { for(int i=x;i<=n;i+=i&-i)for(int j=y;j<=m;j+=j&-j)s[i][j]+=k; } LL getsum(int x,int y) { LL res=0; for(int i=x;i>=1;i-=i&-i)for(int j=y;j>=1;j-=j&-j)res+=s[i][j]; return res; } int main() { scanf("%d%d",&n,&m); memset(s,0,sizeof(s)); int op,k,x,y,a,b,c,d; while(scanf("%d",&op)!=EOF) { if(op==1) { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); add(a,b,k); add(a,d+1,-k); add(c+1,b,-k); add(c+1,d+1,k); } else { scanf("%d%d",&x,&y); printf("%lld\n",getsum(x,y)); } } return 0; } -
0
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=(1<<12)+10; int n,m;LL s[N][N]; void add(int x,int y,int k) { for(int i=x;i<=n;i+=i&-i)for(int j=y;j<=m;j+=j&-j)s[i][j]+=k; } LL getsum(int x,int y) { LL res=0; for(int i=x;i>=1;i-=i&-i)for(int j=y;j>=1;j-=j&-j)res+=s[i][j]; return res; } int main() { scanf("%d%d",&n,&m); memset(s,0,sizeof(s)); int op,k,x,y,a,b,c,d; while(scanf("%d",&op)!=EOF) { if(op==1) { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); add(a,b,k); add(a,d+1,-k); add(c+1,b,-k); add(c+1,d+1,k); } else { scanf("%d%d",&x,&y); printf("%lld\n",getsum(x,y)); } } return 0; }
- 1
信息
- ID
- 395
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 71
- 已通过
- 39
- 上传者