本题的数据范围有点大,所以得使用map去进行离散化。由于map的key不能重,而一行里面又有多个y坐标,所以要用map里面套set的方式去求解。
在消除某一行的时候自然需要把这一行里面列相关的给消除掉,毕竟题上说了死人不能再死一次。让我奇怪的是得要用multiset?难道有可能在一个坐标处建立两个基地吗?
#include <bits/stdc++.h>


using namespace std;

int N, M;
map<int, multiset<int> > mpx;
map<int, multiset<int> > mpy;

int main() {
    int x, y, c, d;
    cin>>N>>M;
    for (int i=0;i<N;i++) {
        cin>>x>>y;
        mpx[x].insert(y);
        mpy[y].insert(x);
    }
    while (M--) {
        int cnt = 0;
        cin>>c>>d;
        if (c==0) {
            set<int>::iterator st = mpx[d].begin();
            for (;st!=mpx[d].end();st++) {
                mpy[*st].erase(d);
            }
            cout<<mpx[d].size()<<endl;
            mpx[d].clear();
        } else {
            set<int>::iterator st = mpy[d].begin();
            for (;st!=mpy[d].end();st++) {
                mpx[*st].erase(d);
            }
            cout<<mpy[d].size()<<endl;
            mpy[d].clear();
        }
    }
    
    return 0;
}