首先推荐几个讲map 和 set的博客。
map:http://blog.youkuaiyun.com/nwf5d/article/details/4338872
然后这题就可以搞定了。
代码如下:
#include<map>
#include<set>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
map< int,multiset<int> > row,col;
int N,M,c,x,y,d;
void work(int flag,int v)
{
int i,j,num;
multiset<int>::iterator it;
if(flag==0)
{
num=row[v].size();
for(it=row[v].begin();it!=row[v].end();it++)
col[*it].erase(v);
row[v].clear();
printf("%d\n",num);
}
else{
num=col[v].size();
for(it=col[v].begin();it!=col[v].end();it++)
row[*it].erase(v);
col[v].clear();
printf("%d\n",num);
}
}
int main()
{
int i,j;
while(scanf("%d%d",&N,&M)!=EOF)
{
if(N+M==0) break;
for(i=1;i<=N;i++)
{
scanf("%d%d",&x,&y);
row[x].insert(y);
col[y].insert(x);
}
for(i=1;i<=M;i++)
{
scanf("%d%d",&c,&d);
work(c,d);
}
printf("\n");
}
return 0;
}