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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值