记录编号 |
297802 |
评测结果 |
AAAAAAAAAAEEEEEEEEEE |
题目名称 |
[HZOI 2014] 天使的小纸条 |
最终得分 |
50 |
用户昵称 |
FoolMike |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
6.880 s |
提交时间 |
2016-08-18 19:26:45 |
内存使用 |
30.93 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=310;
int n,m,q,a[N][N];
struct Bit{
int a[N][N];
int q1[N],q2[N],s1,s2;
inline void change(int x,int y,int add){
s1=s2=0;
for (;x<=n;x+=(x&(-x))) q1[++s1]=x;
for (;y<=m;y+=(y&(-y))) q2[++s2]=y;
for (int i=1;i<=s1;i++)
for (int j=1;j<=s2;j++)
a[q1[i]][q2[j]]+=add;
}
inline int sum(int x,int y){//求区间[(1,1),(x,y)]的和
int ans=0;s1=s2=0;
for (;x;x-=(x&(-x))) q1[++s1]=x;
for (;y;y-=(y&(-y))) q2[++s2]=y;
for (int i=1;i<=s1;i++)
for (int j=1;j<=s2;j++)
ans+=a[q1[i]][q2[j]];
return ans;
}
inline int sum(int x1,int x2,int y1,int y2){
return sum(x2,y2)-sum(x2,y1-1)-sum(x1-1,y2)+sum(x1-1,y1-1);
}
}T[110];
int main()
{
freopen("luvletter.in","r",stdin);
freopen("luvletter.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
T[a[i][j]].change(i,j,1);
}
scanf("%d",&q);
while (q--){
int mark,x,y,x1,y1,c;
scanf("%d",&mark);
if (mark==1){
scanf("%d%d%d",&x,&y,&c);
T[a[x][y]].change(x,y,-1);
T[a[x][y]=c].change(x,y,1);
}
else{
scanf("%d%d%d%d%d",&x,&x1,&y,&y1,&c);
printf("%d\n",T[c].sum(x,x1,y,y1));
}
}
return 0;
}