• 堆--P1168 中位数


     

    记录一个变量$mid$,我们知道中位数是大小处于中间位置的数,所以建立两个堆,一个大根堆,一个小根堆,大根堆存≤ $mid$的数,小根堆存>$mid$的数。所以我们每次向堆中加入元素时,就通过比较和$mid$的大小关系,选择加入大根堆或者小根堆,但我们在输出答案前需要对$mid$进行调整。如果大根堆和小根堆内的元素个数相同,就无需处理,此时$mid$已然是当前的中位数。如果两个堆中元素个数不同,就需要取个数多的一个堆的堆顶,与$mid$取平均值

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <queue>
     4 #include <algorithm>
     5 using namespace std;
     6 int n;
     7 int a[100000];
     8 int mid;
     9 priority_queue <int,vector<int>,less<int> >q1;
    10 priority_queue <int,vector<int>,greater<int> >q2;
    11 int main()
    12 {
    13     scanf ("%d",&n);
    14     scanf ("%d",&a[1]);
    15     mid=a[1];
    16     printf ("%d
    ",mid);
    17     for (int i = 2;i <= n;i++)
    18     {
    19         scanf ("%d",&a[i]);
    20         if (a[i]>mid) q2.push(a[i]);
    21         else q1.push(a[i]);
    22         if (i%2==1)
    23         {
    24             while (q1.size()!=q2.size())
    25             {
    26                 if(q1.size()>q2.size()){
    27                     q2.push(mid);
    28                     mid=q1.top();
    29                     q1.pop();
    30                 }
    31                 else{
    32                     q1.push(mid);
    33                     mid=q2.top();
    34                     q2.pop();
    35                 }
    36             }
    37             cout<<mid<<endl;
    38         }
    39             }
    40     return 0;
    41 }

     

  • 相关阅读:
    cytoscape-d3-force api
    Python基础编程 模块的引入与定义
    更改Ubuntu内核版本
    Jupyter Notebook默认路径修改
    YJZH 前端部署记录 CentOS+Nginx+Vue
    dotnet core webapi centos 服务自启动
    Linux修改时区
    空间数据实战(1)——MySQL
    记录window.sessionStorage的一个小坑
    ElementUI默认表单项el-form-item间距修改
  • 原文地址:https://www.cnblogs.com/very-beginning/p/12203266.html
Copyright © 2020-2023  润新知