-_-!为啥这么多题目的名字都叫
Stars
呢...寒一个~
N很大~点坐标很小~
该题很明显是二维树状树组,不过有一点比较麻烦的就是可能对于同一个点多次插入,开个bool判断即可~~~
还有要注意坐标是0<=x,y<=1000,so别上当,记的处理点的时候x,y坐标要做相应的变化~
查询的时候我是使用区间的加加减减,效率MS还可以提高的说
下面是主要的思路代码:
int main()
{
int T,x,y,x1,y1,ans;
char op;
//OPEN
scanf("%d%*c",&T);
while(T--)
{
scanf("%c",&op);
if(op=='D')
{
scanf("%d%d",&x,&y);
x++;
y++;
if(!mat[x][y]){getchar();continue;}
insp(x,y,-1);
mat[x][y]=false;
}
else if(op=='B')
{
scanf("%d%d",&x,&y);
x++;
y++;
if(mat[x][y]){getchar();continue;}
insp(x,y,1);
mat[x][y]=true;
}
else
{
scanf("%d%d%d%d",&x,&x1,&y,&y1);
ans=0;
if(x>x1)swap(x,x1);
if(y>y1)swap(y,y1);
x1++;
y1++;
ans+=Q(x1,y1);
ans-=Q(x,y1);
ans-=Q(x1,y);
ans+=Q(x,y);
printf("%d/n",ans);
}
getchar();
}
return 0;
}