The 36th ACM/ICPC Asia Regional Shanghai Site —— Online Contest
题意:轰炸机轰炸基地,一颗炸弹炸一排或一行,按顺序输出每个轰炸机轰炸基地的个数。
map+set 除了代码短,时空复杂度都高,囧~要用其他方法做做。
#include <iostream>
#include <set>
#include <map>
using namespace std;
typedef map<int, multiset<int> > M_TYPE;
int ans[100002], id;
void pop(M_TYPE &a, M_TYPE &b, int key)
{
ans[id++] = a[key].size();
for(multiset<int>::iterator it = a[key].begin(); it != a[key].end(); it++)
b[*it].erase(key);
a[key].clear();
}
int main()
{
int n, m, x, y, i;
while(scanf("%d%d", &n, &m))
{
if(!n && !m) break;
M_TYPE xy, yx;
id = 0;
for(i = 0; i < n; i++)
{
scanf("%d%d", &x, &y);
xy[x].insert(y);
yx[y].insert(x);
}
for(i = 0; i < m; i++)
{
scanf("%d%d", &x, &y);
if(x == 0)
pop(xy, yx, y);
else
pop(yx, xy, y);
}
for(i = 0; i < m; i++)
printf("%d\n", ans[i]);
printf("\n");
}
return 0;
}
代码参考这儿的:http://blog.csdn.net/xymscau/article/details/6768228