本文共 1469 字,大约阅读时间需要 4 分钟。
人工模拟。。
#include #include #include #include #include #include #include #include using namespace std;#define N 10100#define inf 1000000010map 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 sety;multiset ::iterator py, ty;multiset setx;multiset ::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;}
版权声明:本文博主原创文章。博客,未经同意不得转载。