1. 可能有重复点(这一点题目并没有说明),因此 set 行不通
2. 用 C++ 的 cin, cout 超时
/*
* hdu 4022
* http://acm.hdu.edu.cn/showproblem.php?pid=4022
* 1500MS 12376K
* 【map】【multiset】
* 1. 可能有重复点(这一点题目并没有说明),因此 set 行不通
* 2. 用 C++ 的 cin, cout 超时
*/
#include <cstdio>
#include <map>
#include <set>
using namespace std;
typedef map<int, multiset<int> > BaseMap;
void BombLine(BaseMap &oBMTarget, int iLine, BaseMap &oBM2)
{
for (multiset<int>::iterator it = oBMTarget[iLine].begin();
it != oBMTarget[iLine].end(); ++it )
{
oBM2[*it].erase(iLine);
}
oBMTarget[iLine].clear();
}
int main()
{
int iBaseNum, iBomberNum, x, y, c, d;
while (1)
{
scanf("%d%d", &iBaseNum, &iBomberNum);
if ( (0 == iBaseNum) && (0 == iBomberNum) )
{
break;
}
BaseMap oBMh, oBMv;
while (iBaseNum--)
{
scanf("%d%d", &x, &y);
oBMh[x].insert(y);
oBMv[y].insert(x);
}
while (iBomberNum--)
{
scanf("%d%d", &c, &d);
if (0 == c)
{
printf("%d\n", oBMh[d].size());
BombLine(oBMh, d, oBMv);
}
else
{
printf("%d\n", oBMv[d].size());
BombLine(oBMv, d, oBMh);
}
}
printf("\n");
}
return 0;
}