首页 > 其他 > 详细

中位数

时间:2019-09-22 00:41:02      阅读:167      评论:0      收藏:0      [点我收藏+]

【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 }

 

中位数

原文:https://www.cnblogs.com/66dzb/p/11565478.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!