中位数

Posted 66dzb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中位数相关的知识,希望对你有一定的参考价值。

【timegate】

https://www.luogu.org/problem/P1168

【解题思路】

使用两个堆,大根堆维护较小的值,小根堆维护较大的值

即小根堆的堆顶是较大的数中最小的,大根堆的堆顶是较小的数中最大的

【code】

 1 #include <cstdio>
 2 #include <queue>
 3 #include <cmath>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7 int n,a;
 8 priority_queue<int> q;
 9 priority_queue<int,vector<int>,greater<int> > qq;
10 int main()
11     scanf("%d",&n); 
12     scanf("%d",&a);
13     q.push(a);
14     printf("%d\n",a); 
15     for(register int i=2;i<=n;i++)
16         scanf("%d",&a);
17         if (a>q.top()) 
18             qq.push(a);
19         else q.push(a);
20         while (q.size()-qq.size()>1)
21             if (q.size()>qq.size())
22                 qq.push(q.top());
23                 q.pop();
24             
25             else
26                 q.push(qq.top());
27                 qq.pop();
28             
29         
30         if (i&1) 
31             printf("%d\n",q.size()>qq.size()?q.top():qq.top());
32     
33     return 0;
34 

 

以上是关于中位数的主要内容,如果未能解决你的问题,请参考以下文章

为啥中位数比平均数大

中位数: 给定一个未排序的整数数组,找到其中位数。

理解python 中位数

中位数怎么求

中位数是多少?和平均数比较哪个大

中位数怎么求?