这个可以用STL中的map和multiset来做
(注意:采用scanf()和printf()输入输出,用cin,cout果断TLE)
#include<iostream>
#include<cstdio>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
typedef map<int,multiset<int> > line;
line fx,fy;
void count_num(line &lx,line &ly,int pos)
{
int num=lx[pos].size();
multiset<int>::iterator it;
for(it=lx[pos].begin();it!=lx[pos].end();it++)
ly[*it].erase(pos);//对应的(x,y)删除一个
lx[pos].clear();//满足pos的点果断全删
printf("%d\n",num);
}
int main()
{
int n,m,i,j,x,y,c,d;
while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
{
fx.clear();fy.clear();
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
fx[x].insert(y);
fy[y].insert(x);
}
for(i=0;i<m;i++)
{
scanf("%d%d",&c,&d);
if(c==0) count_num(fx,fy,d);
else count_num(fy,fx,d);
}
printf("\n");
}
return 0;
}