zoukankan      html  css  js  c++  java
  • hdu4022 map+multiset

    题意:
          给你一些敌人的坐标,每次让你删除某一行或者某一列,问你每一次操作能删除多少人.....

    思路:

          map和multiset的完美结合,吧set定义到map里,达到一个一对多的效果,其实就是实现一个一维multi数组,可以随时查询长度的数组,同时用map还可以达到离散化的效果,开两个数组,表示 markx[] ,marky[], x所在行 和 y所在列的元素,这样每次 清除一行 和 另一个数组中的某些元素,或者清除一列和另一个数组中的某些元素,达到越删除越快的效果,时间复杂度最大是 O(n)....... 


    #include<stdio.h>
    #include<map>
    #include<set>
    
    using namespace std;
    
    map<int ,multiset<int> >markx ,marky;
    multiset<int>::iterator iter;
    
    int main ()
    {
       int n ,m ,i ,a ,b;
       while(~scanf("%d %d" ,&n ,&m) &&  n + m)
       {
          markx.clear();
          marky.clear();
          for(i = 1 ;i <= n ;i ++)
          {
             scanf("%d %d" ,&a ,&b);
             markx[a].insert(b);
             marky[b].insert(a);
          }
          for(i = 1 ;i <= m ;i ++)
          {
             scanf("%d %d" ,&a ,&b);
             int ans;
             if(!a)
             {
                ans = markx[b].size();
                for(iter = markx[b].begin() ;iter != markx[b].end() ;iter ++)
                {
                   marky[*iter].erase(b);
                }
                markx[b].clear();
             }
             else
             {
                ans = marky[b].size();
                for(iter = marky[b].begin() ;iter != marky[b].end() ;iter ++)
                {
                   markx[*iter].erase(b);
                }
                marky[b].clear();
             }
             printf("%d
    " ,ans);
          }
          printf("
    ");
       }
       return 0;
    }
          
            
    

  • 相关阅读:
    js将手机号中间四位变成*
    js判断浏览器客户端类型
    vue项目涉及到的setInterval
    MYSQL 总结——2
    MySQL补充
    PyCharm软件安装
    MYSQL 总结——1
    linux系统通过ssh拉取gitee项目 设置权限
    tp5开源的后台管理系统
    window下Python安装
  • 原文地址:https://www.cnblogs.com/csnd/p/12063255.html
Copyright © 2011-2022 走看看