HDU 4022 Bombing STL 模拟题

2014-11-24 12:48:15 · 作者: · 浏览: 1

手动模拟。。

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
          using namespace std; #define N 10100 #define inf 1000000010 map
          
           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; }