hdu 4022 Bombing (离散化)
wa了两次,原因是在同一个点可能有多个基地。。。
所以用set 是错误的,应该用multiset
然后因为这道题看到了map+set实现离散化的另外一种写法
我的代码:
/*************************************************************************
> File Name: code/hdoj/4022.cpp
> Author: 111qqz
> Email: rkz2013@126.com
> Created Time: 2015年08月01日 星期六 04时37分20秒
************************************************************************/
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<stack>
#define y0 abc111qqz
#define y1 hust111qqz
#define yn hez111qqz
#define j1 cute111qqz
#define tm crazy111qqz
#define lr dying111qqz
using namespace std;
#define REP(i, n) for (int i=0;i<int(n);++i)
typedef long long LL;
typedef unsigned long long ULL;
const int N=2E5+7;
const int inf = 0x7fffffff;
map<int,int>xmap,ymap;
multiset<int>x[N];
multiset<int>y[N];
int main()
{
int n,m;
while (scanf("%d %d",&n,&m)!=EOF)
{
if (n==0&&m==0) break;
for ( int i = 1 ; i <= n ; i++)
{
x[i].clear();
y[i].clear();
}
xmap.clear();
ymap.clear();
int tx,ty;
int cntx=0,cnty=0;
for ( int i = 1 ; i <= n ; i++ )
{
scanf("%d %d",&tx,&ty);
if (!xmap[tx]) xmap[tx]=++cntx;
if (!ymap[ty]) ymap[ty]=++cnty;
x[xmap[tx]].insert(ymap[ty]);
y[ymap[ty]].insert(xmap[tx]);
}
int c,d;
set<int>::iterator it;
for ( int i = 1; i <= m ; i++ )
{
scanf("%d %d",&c,&d);
if (c==0)
{
cout<<x[xmap[d]].size()<<endl;
for ( it = x[xmap[d]].begin();it!=x[xmap[d]].end();it++)
{
y[*it].erase(xmap[d]);
}
x[xmap[d]].clear();
}
else
{
cout<<y[ymap[d]].size()<<endl;
for ( it =y[ymap[d]].begin();it!=y[ymap[d]].end();it++)
{
x[*it].erase(ymap[d]);
}
y[ymap[d]].clear();
}
}
printf("\n");
}
return 0;
}