hdu 4022 Bombing (离散化)

Posted by 111qqz on Saturday, August 1, 2015

TOC

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;
}

「真诚赞赏,手留余香」

111qqz的小窝

真诚赞赏,手留余香

使用微信扫描二维码完成支付