#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1005;
int tree[MAX_N][MAX_N];
bool vis[MAX_N][MAX_N];
void Update(int x,int y,int val)
{
for(int i=x;i<MAX_N;i+=(i&-i))
for(int j=y;j<MAX_N;j+=(j&-j))
tree[i][j]+=val;
}
int Getsum(int x,int y)
{
int res=0;
for(int i=x;i>0;i-=(i&-i))
for(int j=y;j>0;j-=(j&-j))
res+=tree[i][j];
return res;
}
int main()
{
std::ios::sync_with_stdio(false);
int kase;
cin>>kase;
while(kase--)
{
int a,b,c,d;
char C;
cin>>C>>a>>b;
if('B'==C)
{
if(!vis[++a][++b])
{
Update(a,b,1);
vis[a][b]=1;
}
}
else if('D'==C)
{
if(vis[++a][++b])
{
Update(a,b,-1);
vis[a][b]=0;
}
}
else
{
cin>>c>>d;
a++,b++,c++,d++;
cout<<Getsum(max(a,b),max(c,d))+Getsum(min(a,b)-1,min(c,d)-1)-Getsum(min(a,b)-1,max(c,d))-Getsum(max(a,b),min(c,d)-1)<<endl;
}
}
return 0;
}
HDU 2642 二维树状数组
最新推荐文章于 2021-04-29 23:41:03 发布