您的位置:首页 > 其它

2015轻院校赛 矩阵

2016-04-14 20:50 169 查看
---恢复内容开始---

http://acm.zznu.edu.cn/problem.php?id=1967

题目大意 : 矩阵A [i][j]=i+j;

Q代表查询 求任意一个矩阵的和

M代表更换 把原来的换成现在这个数

分析: 如果暴搜肯定不行 就想到一种好方法 把他们的和保存到一个数组 事先打好一个表 后面更新的点一一的记录下来

求和的时候就只需把在这个求得小长方形里的更新的值加到一起 最后在加上原来矩阵的和就可以

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath>

using namespace std;
#define memset(a,b) memset(a,b,sizeof(a))
#define N 1100

struct node
{
int x,y,c;
}a
;
int sum

;

void Inn()
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
sum[i][j]=sum[i-1][j]+sum[i][j-1]+i+j-sum[i-1][j-1];
}
}
}
int main()
{
int T,n,m,Q;
char str[5];
scanf("%d",&T);

Inn();
while(T--)
{
scanf("%d %d %d",&n,&m,&Q);
int k=0;
while(Q--)
{

int x1,x2,y1,y2,h;
scanf("%s",str);
if(str[0]=='Q')
{
int ans=0;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
for(int i=0;i<k;i++)
{
if(a[i].x>=x1 && a[i].x<=x2 && a[i].y>=y1 && a[i].y<=y2)
{
ans=ans+a[i].c-(a[i].x+a[i].y);
}
}
ans=ans+sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];
printf("%d\n",ans);
}
else
{
int f=0;
scanf("%d %d %d",&x1,&y1,&h);
for(int i=0;i<k;i++)
{
if(x1==a[i].x && y1==a[i].y)
{
a[i].c=h;
f=1;
break;
}
}
if(f==0)
a[k].x=x1,
a[k].y=y1,
a[k++].c=h;
}
}
}
return 0;
}


---恢复内容结束---
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: