二维BIT裸题
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3+3;
#define lowbit(x) (x&(-x))
int f[MAXN][MAXN],a[MAXN][MAXN];
void add(int x, int y, int val)
{
for(int i = x; i < MAXN; i += lowbit(i))
for(int j = y; j < MAXN; j += lowbit(j))
f[i][j] += val;
}
int sum(int x, int y)
{
int ret = 0;
for(int i = x; i > 0; i -= lowbit(i))
for(int j = y; j > 0; j -= lowbit(j))
ret += f[i][j];
return ret;
}
int main()
{
int q,x1,x2,y1,y2;
char op;
scanf("%d",&q);
while(q--)
{
scanf(" %c",&op);
if(op == 'B')
{
scanf("%d %d",&x1,&y1);
++x1,++y1;
if(a[x1][y1] == 0)
{
add(x1,y1,1);
a[x1][y1] = 1;
}
}
else if(op == 'D')
{
scanf("%d %d",&x1,&y1);
++x1,++y1;
if(a[x1][y1] != 0)
{
add(x1,y1,-1);
a[x1][y1] = 0;
}
}
else
{
scanf("%d %d %d %d",&x1,&x2,&y1,&y2);
++x1,++y1,++x2,++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));
}
}
return 0;
}