二叉堆

 1 #include <bits/stdc++.h>
 2 //道理很简单,  奇数比较中位数  小于放小根堆 大于放大根堆   其次要看的就是两个队列的元素多少  以此来判断目前的中位数   然后依次输出即可
 3 using namespace std;
 4 priority_queue<int,vector<int>,less<int> >q1;//大根堆
 5 priority_queue<int,vector<int>,greater<int> >q2;//小根堆
 6 int n;
 7 int a[2000];
 8 int mid;
 9 int main()
10 {
11     cin>>n;
12     scanf("%d",&a[1]);
13     mid=a[1];
14     for(int i=2;i<=n;i++)
15     {
16         cin>>a[i];
17         if(a[i]>mid)
18             q2.push(a[i]);
19         else
20             q1.push(a[i]);
21         if(i%2==1)
22         {
23             while(q1.size()!=q2.size())
24             {
25                 if(q1.size()>q2.size())
26                 {
27                     q2.push(mid);
28                     mid=q1.top();
29                     q1.pop();
30                 }
31                 else
32                 {
33                     q1.push(mid);
34                     mid=q2.top();
35                     q2.pop();
36                 }
37             }
38             cout<<mid<<endl;
39         }
40     }
41     return 0;
42 }

 

posted @ 2022-02-13 18:59  九点的日落  阅读(33)  评论(0)    收藏  举报