• HDU


    题意:

    按照顺序给你n个数,当数的数量是奇数的时候就输出它们的中位数

    题解:

    优先队列默认是大顶堆,即priority_queue.top()是这个队列中的最大值

    那么我们就可以先创造一个大顶堆优先队列qmax,和一个小顶堆qmin

    qmin里面放的是大于等于中位数的数,qmax里面放的是比中位数小的数
    因为qmin是小顶堆,那么qmin.top()肯定就是中位数
    (上面的话是在中位数的前提下)

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     int t;
     6     scanf("%d",&t);
     7     while(t--)
     8     {
     9         priority_queue<int > qmax;  //大顶堆
    10         priority_queue<int ,vector<int > ,greater <int > >qmin;  //小顶堆
    11         int cnt;
    12         int n;
    13         scanf("%d%d",&cnt,&n);
    14         printf("%d %d
    ",cnt,(n/2+1));
    15         for(int i=1;i<=n;i++)
    16         {
    17             int mid;
    18             scanf("%d",&mid);
    19             if(qmin.size()==0)
    20                 qmin.push(mid);
    21             else
    22             {
    23                 if(mid>qmin.top())
    24                     qmin.push(mid);
    25                 else qmax.push(mid);
    26             }
    27             while(qmin.size()!=qmax.size() && qmin.size()!=qmax.size()+1)  //这两个条件任意一个不满足就要跳出来
    28             {
    29                 if(qmax.size()>qmin.size())
    30                 {
    31                     int x=qmax.top();
    32                     qmax.pop();
    33                     qmin.push(x);
    34                 }
    35                 else
    36                 {
    37                     int x=qmin.top();
    38                     qmin.pop();
    39                     qmax.push(x);
    40                 }
    41             }
    42             /*
    43             经过上面的while处理后,qmin里面放的是大于等于中位数的数,qmax里面放的是比中位数小的数
    44             因为qmin是小顶堆,那么qmin.top()肯定就是中位数
    45             (上面的话是在中位数的前提下)
    46             */
    47             if(i&1)
    48                 cout << qmin.top();
    49             if((i+1)%20==0||i==n)
    50                 cout << endl;
    51             else if(i&1)
    52                 cout << " ";
    53         }
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    关于链表的一个小程序
    位操作
    结构和其他数据形式
    存储类、链接、内存管理
    文件输入/输出
    为什么返回IEnumerbale而不是List
    EncType
    script标签不能闭合
    jqueryUI AutoCompelete
    ChangeType
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12804931.html
Copyright © 2020-2023  润新知