手动模拟。。
#include<stdio.h> #include<iostream> #include<algorithm> #include<vector> #include<cmath> #include<queue> #include<set> #include<map> using namespace std; #define N 10100 #define inf 1000000010 map<int,int>x,y; struct X{ int x,y; bool operator<(const X&a)const{ if(a.x==x)return a.y>y; return a.x>x; } X(int a=0,int b=0):x(a),y(b){} }tmpx; struct Y{ int x,y; bool operator<(const Y&a)const{ if(a.y==y)return a.x>x; return a.y>y; } Y(int a=0,int b=0):x(a),y(b){} }tmpy; multiset<Y>sety; multiset<Y>::iterator py, ty; multiset<X>setx; multiset<X>::iterator px, tx; int main(){ int n, m, u, v; while(scanf("%d %d",&n,&m),n+m){ x.clear(); y.clear(); setx.clear(); sety.clear(); while(n--){ scanf("%d %d",&u,&v); x[u]++; y[v]++; setx.insert(X(u,v)); sety.insert(Y(u,v)); } while(m--){ scanf("%d %d",&u,&v); if(u==0){ if(x.find(v)==x.end()){puts("0");continue;} printf("%d\n",x.find(v)->second); x.erase(v); for(px=setx.lower_bound(X(v,-inf));px!=setx.end();) { tmpx = *px; if(tmpx.x!=v)break; py = sety.lower_bound(Y(tmpx.x,tmpx.y)); sety.erase(py); y[tmpx.y]--; tx = px; px++; setx.erase(tx); } } else { if(y.find(v)==y.end()){puts("0");continue;} printf("%d\n",y.find(v)->second); y.erase(v); for(py=sety.lower_bound(Y(-inf,v));py!=sety.end();) { tmpy = *py; if(tmpy.y!=v)break; px = setx.lower_bound(X(tmpy.x,tmpy.y)); setx.erase(px); x[tmpy.x]--; ty = py; py++; sety.erase(ty); } } } puts(""); } return 0; }
HDU 4022 Bombing STL 模拟题,布布扣,bubuko.com
原文地址:http://blog.csdn.net/acmmmm/article/details/25557045