hdu4022 Bombing stl(map+set)

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

你可能感兴趣的:(iterator)