mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
82 lines
1.6 KiB
C++
82 lines
1.6 KiB
C++
|
#include <stdio.h>
|
||
|
#include <iostream>
|
||
|
#include <string.h>
|
||
|
using namespace std;
|
||
|
const int N=1010;
|
||
|
int c[N][N];
|
||
|
bool vis[N][N];
|
||
|
int lowbit(int x)
|
||
|
{
|
||
|
return x&(-x);
|
||
|
}
|
||
|
void add(int x,int y,int val)
|
||
|
{
|
||
|
int i=y;
|
||
|
while(x<=N)
|
||
|
{
|
||
|
y=i;
|
||
|
while(y<=N)
|
||
|
{
|
||
|
c[x][y]+=val;
|
||
|
y+=lowbit(y);
|
||
|
}
|
||
|
x+=lowbit(x);
|
||
|
}
|
||
|
}
|
||
|
int sum(int x,int y)
|
||
|
{
|
||
|
int i,sum=0;
|
||
|
i=y;
|
||
|
while(x)
|
||
|
{
|
||
|
y=i;
|
||
|
while(y)
|
||
|
{
|
||
|
sum+=c[x][y];
|
||
|
y-=lowbit(y);
|
||
|
}
|
||
|
x-=lowbit(x);
|
||
|
}
|
||
|
return sum;
|
||
|
}
|
||
|
int main()
|
||
|
{
|
||
|
int n,x1,x2,y1,y2;
|
||
|
scanf("%d",&n);
|
||
|
memset(c,0,sizeof(c));
|
||
|
memset(vis,0,sizeof(vis));
|
||
|
while(n--)
|
||
|
{
|
||
|
getchar();
|
||
|
char c;
|
||
|
scanf("%c ",&c);
|
||
|
if(c=='Q')
|
||
|
{
|
||
|
scanf("%d%d%d%d",&x1,&x2,&y1,&y2);
|
||
|
x1++,x2++,y1++,y2++;
|
||
|
if(x1>x2)swap(x1,x2);
|
||
|
if(y1>y2)swap(y1,y2);
|
||
|
printf("%d\n",(sum(x2,y2)+sum(x1-1,y1-1)-sum(x1-1,y2)-sum(x2,y1-1)));
|
||
|
}
|
||
|
else if(c=='B')
|
||
|
{
|
||
|
scanf("%d%d",&x1,&y1);
|
||
|
if(vis[x1+1][y1+1]==1)
|
||
|
continue;
|
||
|
else
|
||
|
add(x1+1,y1+1,1);
|
||
|
vis[x1+1][y1+1]=1;
|
||
|
}
|
||
|
else if(c=='D')
|
||
|
{
|
||
|
scanf("%d%d",&x1,&y1);
|
||
|
if(vis[x1+1][y1+1]==0)
|
||
|
continue;
|
||
|
else
|
||
|
add(x1+1,y1+1,-1);
|
||
|
vis[x1+1][y1+1]=0;
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|