zoukankan      html  css  js  c++  java
  • hdu--4022--multimap<别人用快排+二分,没学好>

    本来 我是想直接开2个计数数组 存下 行 列各自的元素个数的..

    可是 数据达到了 10^9 但是数据个数 只有10^5 虽然可以考虑用 离散化...但我想先map试下 毕竟 离散化烦~

    关于multimap的使用 和map还是有点差别的..但是 我们单纯地只是使用 stl中的函数的话 还是不存在什么难度吧 

    听说 <<STL源码剖析>>不错...可是 不太适合初学者~ =_=   大师 经典..

    我这题的wa错误 太难找了 厌死....

    我因为一开始想使用数组的原因  多此一举地 将 c d中的d取 绝对值了 ..我也是醉了

    还有一个错误...就是 待会在代码注释你们将会看到的

    在输出 col[x] 与 row[x]后   将它们重置为0了  这是 致命的错误 =_= 因为我的If判断条件是 >=0 那么如果下次 又询问到它的时候 会导致重复计算该行 或 列上的点..

    就会导致后续的错误.

     1 #include <iostream>
     2 #include <map>
     3 using namespace std;
     4 
     5 multimap<int,int>rowMp;
     6 multimap<int,int>colMp;
     7 map<int,int>row;
     8 map<int,int>col;
     9 
    10 int main()
    11 {
    12     int n , m , op , x , y;
    13     while( ~scanf("%d%d",&n,&m) )
    14     {
    15         if(!n&&!m)
    16             break;
    17         row.clear();
    18         rowMp.clear();
    19         col.clear();
    20         colMp.clear();
    21         while( n-- )
    22         {
    23             scanf("%d%d",&x,&y);
    24             col[x] ++;
    25             row[y] ++;
    26             colMp.insert( pair<int,int>(x,y) );
    27             rowMp.insert( pair<int,int>(y,x) );
    28         }
    29         multimap<int,int>::iterator rowIt;
    30         multimap<int,int>::iterator colIt;
    31         while( m-- )
    32         {
    33             scanf("%d%d",&op,&x);
    34             if( op )//y = d  清空行 
    35             {
    36                 if( row[x]>=0 )
    37                 {
    38                     printf("%d
    ",row[x]);
    39                     //row[x] = 0;
    40                     row[x] = -1;
    41                     rowIt = rowMp.find( x );
    42                     int num = rowMp.count( x );
    43                     while(num--)
    44                     {
    45                         col[rowIt->second] --;
    46                         rowIt ++;
    47                     }
    48                 }
    49                 else
    50                 {
    51                     printf("0
    ");
    52                 }
    53             }
    54             else //x = d清空 列 
    55             {
    56                 if( col[x]>=0 )
    57                 {
    58                     printf( "%d
    ",col[x] );
    59                     //col[x] = 0;
    60                     col[x] = -1;
    61                     colIt = colMp.find( x );
    62                     int num = colMp.count( x );
    63                     while( num-- )
    64                     {
    65                         row[colIt->second] --;    
    66                         colIt ++;            
    67                     }
    68                 }
    69                 else
    70                 {
    71                     printf("0
    ");
    72                 }
    73             }
    74         }
    75         printf("
    ");
    76     }
    77     return 0;
    78 }
    View Code


    我再去学习 人家用 快排+二分的做法.

    today:

      我是个 得意忘形 的人

      

    just follow your heart
  • 相关阅读:
    系统数据查询耗时优化解决方案
    Mybatis逆向工程
    微服务架构下的分布式数据管理
    分布式或微服务架构中的分布式锁应用
    word 常用宏代码
    office2003?2007共存?版本各自打开的解决方案
    word域3
    2014新版《安全生产法》测试题
    Excel与Word套打功能使用技巧及EXCEL数据处理成绩
    word域2
  • 原文地址:https://www.cnblogs.com/radical/p/4077961.html
Copyright © 2011-2022 走看看