题目描述
给出一个长度为NN的非负整数序列A_iAi,对于所有1 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A_1, A_3, …, A_{2k - 1}A1,A3,…,A2k−1的中位数。即前1,3,5,…1,3,5,…个数的中位数。
输入格式
第11行为一个正整数NN,表示了序列长度。
第22行包含NN个非负整数A_i (A_i ≤ 10^9)Ai(Ai≤109)。
输出格式
共(N + 1) / 2(N+1)/2行,第ii行为A_1, A_3, …, A_{2k - 1}A1,A3,…,A2k−1的中位数。
本题要用到优先队列定义堆:
such as:
priority_queue<int,vetor<int>,greater<int> >p1;——小根堆(扔进去的数据自动排为由小到大)
priority_queue<int,vector<int>,less<int> >p2; ——大根堆(扔进去的数据自动排为由大到小)
堆顶堆:

代码(愿以后的我能看懂):
1 #include<bits/stdc++.h>
2 using namespace std;
3 priority_queue<int,vector<int>,less<int> >p2;
4 priority_queue<int,vector<int>,greater<int> >p1;
5 int n,x;
6 int mid;
7 int main()
8 {
9 cin>>n;
10 cin>>x;
11 mid=x;
12 cout<<mid<<endl;//取中位数
13 for(int i=2;i<=n;i++)
14 {
15 cin>>x;
16 if(x<mid)
17 p2.push(x);
18 if(x>mid)
19 p1.push(x);
20 if((i-1)%2==0)
21 {
22 if(p1.size() >p2.size() )
23 {
24 p2.push(mid);
25 mid=p1.top() ;
26 p1.pop() ;
27 }
28 if(p1.size() <p2.size() )
29 {
30 p1.push(mid) ;
31 mid=p2.top() ;
32 p2.pop() ;
33 }
34 cout<<mid<<endl;
35 }
36 }
37 return 0;
38 }