中位数

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxn=1e5+7;
 7 int n,inp;
 8 priority_queue<int>q1;
 9 priority_queue<int,vector<int>,greater<int> > q2;
10 int main(){
11     cin>>n;cin>>inp;q1.push(inp);cout<<inp<<endl;
12     for(int i=2;i<=n;i++){
13         cin>>inp;
14         if(inp>q1.top()) q2.push(inp);
15         else q1.push(inp);
16         while (q1.size()-q2.size()>1&&q2.size()-q1.size()>1){
17             if (q1.size()>q2.size()){q2.push(q1.top());q1.pop();}
18             if (q1.size()<q2.size()){q1.push(q2.top());q2.pop();}
19         }
20         if(i%2==1){
21             if(q1.size()>q2.size()) cout<<q1.top()<<endl;
22             else cout<<q2.top()<<endl; 
23         }
24     }
25     return 0;
26 } 

不要想什么树状数组,离散化,就是两个堆来维护,这种想法接触过

 

posted @ 2018-08-28 15:00  lcan  阅读(161)  评论(0编辑  收藏  举报