二维数组解决矩阵相加...
来源:互联网 发布:泡妞宝鉴天地知我心txt 编辑:程序博客网 时间:2024/06/05 20:23
View Code
#include <stdio.h>
#include <string.h>
int n;
int a[510][510];
int lowbit(int x)
{
return x&(-x);
}
void inc(int x,int y,int z)
{
for (int j=x;j<=n;j+=lowbit(j))
for (int i=y;i<=n;i+=lowbit(i))
a[j][i]+=z;
}
long long sum(int x,int y)
{
long long s=0;
for (int i=x;i>=1;i-=lowbit(i))
for (int j=y;j>=1;j-=lowbit(j))
s+=a[i][j];
return s;
}
int main()
{
int m,k;
while (~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
scanf("%d",&k);
inc(i,j,k);
}
while (m--)
{
int x1,y1,x2,y2;
long long s;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
s=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1);
printf("%lld\n",s);
}
}
return 0;
#include <string.h>
int n;
int a[510][510];
int lowbit(int x)
{
return x&(-x);
}
void inc(int x,int y,int z)
{
for (int j=x;j<=n;j+=lowbit(j))
for (int i=y;i<=n;i+=lowbit(i))
a[j][i]+=z;
}
long long sum(int x,int y)
{
long long s=0;
for (int i=x;i>=1;i-=lowbit(i))
for (int j=y;j>=1;j-=lowbit(j))
s+=a[i][j];
return s;
}
int main()
{
int m,k;
while (~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
scanf("%d",&k);
inc(i,j,k);
}
while (m--)
{
int x1,y1,x2,y2;
long long s;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
s=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1);
printf("%lld\n",s);
}
}
return 0;
题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1693
- 二维数组解决矩阵相加...
- 2维数组矩阵相加
- 矩阵类,二维数组
- 矩阵、二维数组
- 二维数组 矩阵相乘
- java中二维数组相加并打印
- 动态二维数组,螺旋矩阵
- 蛇形矩阵填写二维数组
- 矩阵旋转-二维数组指针
- 二维数组动态分配&螺旋矩阵
- 二维数组---矩阵转置
- 二维数组---矩阵转置
- 二维数组---矩阵转置
- 二维数组矩阵转置
- 矩阵相加
- 矩阵相加
- 矩阵相加
- 矩阵相加
- 栈...
- 栈与队列....
- 树状数组解决敌兵布阵~~
- Japan 树状数组加逆序数...
- 纠结的二维数组 Matrix
- 二维数组解决矩阵相加...
- Another Very Easy Task 我也不知道怎么会过不了?
- 1487: 未覆盖顶点数量.
- SPOJ:416 Divisibility by 15
- 最小生成树之Swordfish
- 哎~水题,还是最小生成树。没想到一遍AC了...
- 最小生成树,继续水~
- 并查集~
- 遇到的第一个上面特判题...刚开始以为样例错了...其实真错了~