mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
492bdd03ea
1800-1899
104 lines
2.8 KiB
C++
104 lines
2.8 KiB
C++
#include<iostream>
|
|
using namespace std;
|
|
int a[1010][1010],c[1010][1010],n=1005;
|
|
int lowbit(int x)
|
|
{
|
|
return x&(-x);
|
|
}
|
|
int sum(int x,int y)
|
|
{
|
|
int i,j,sum=0;
|
|
for(i=x;i>0;i-=lowbit(i))
|
|
{
|
|
for(j=y;j>0;j-=lowbit(j))
|
|
{
|
|
sum+=c[i][j];
|
|
}
|
|
}
|
|
return sum;
|
|
}
|
|
void inster(int x,int y,int z)
|
|
{
|
|
int i,j;
|
|
for(i=x;i<=n;i+=lowbit(i))
|
|
{
|
|
for(j=y;j<=n;j+=lowbit(j))
|
|
{
|
|
c[i][j]+=z;
|
|
}
|
|
}
|
|
}
|
|
int main()
|
|
{
|
|
int x1,y1,x2,y2,t,m,i,j,n1,f=0;
|
|
scanf("%d",&t);
|
|
while(t--)
|
|
{
|
|
printf("Case %d:\n",++f);
|
|
memset(a,0,sizeof(a));
|
|
memset(c,0,sizeof(c));
|
|
for(i=1;i<=n;i++)
|
|
for(j=1;j<=n;j++)
|
|
{
|
|
a[i][j]=1;
|
|
inster(i,j,1);
|
|
}
|
|
scanf("%d",&m);
|
|
while(m--)
|
|
{
|
|
char s;
|
|
getchar();
|
|
s=getchar();
|
|
if(s=='S')
|
|
{
|
|
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
|
|
x1++;x2++;y1++;y2++;
|
|
if(x1>x2)
|
|
swap(x1,x2);
|
|
if(y1>y2)
|
|
swap(y1,y2);
|
|
printf("%d\n",sum(x2,y2)-sum(x2,y1-1)-sum(x1-1,y2)+sum(x1-1,y1-1));
|
|
}
|
|
else
|
|
if(s=='A')
|
|
{
|
|
scanf("%d%d%d",&x1,&y1,&n1);
|
|
x1++;y1++;
|
|
inster(x1,y1,n1);
|
|
a[x1][y1]+=n1;
|
|
}
|
|
else
|
|
if(s=='D')
|
|
{
|
|
scanf("%d%d%d",&x1,&y1,&n1);
|
|
x1++;y1++;
|
|
if(n1>a[x1][y1])
|
|
n1=a[x1][y1];
|
|
inster(x1,y1,-n1);
|
|
a[x1][y1]-=n1;
|
|
}
|
|
else
|
|
if(s=='M')
|
|
{
|
|
scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&n1);
|
|
x1++;y1++;x2++;y2++;
|
|
if(a[x1][y1]>=n1)
|
|
{
|
|
a[x1][y1]-=n1;
|
|
inster(x1,y1,-n1);
|
|
inster(x2,y2,n1);
|
|
a[x2][y2]+=n1;
|
|
}
|
|
else
|
|
{
|
|
inster(x1,y1,-a[x1][y1]);
|
|
inster(x2,y2,a[x1][y1]);
|
|
a[x2][y2]+=a[x1][y1];
|
|
a[x1][y1]=0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|