Description
长为L的升序序列S,S[L / 2]为其中位数。
给出两个等长升序序列S1和S2,求两序列合并并排序后的中位数。
Input
多组数据,每组第一行为n,表示两个等长升序序列的长度。
接下来n行为升序序列S1的元素,再接下来n行为升序序列S2的元素。
1 <= n <= 10 ^ 5,S内容为整数。
不超过5组数据。
Output
每组数据,输出合并并排序后的序列的中位数。
Sample Input
5
11
13
15
17
19
2
4
6
8
20
Sample Output
11
HINT
代码
#include<iostream>
#include<queue>
using namespace std;
main()
{
int n;
while(scanf("%d",&n)!=EOF){
priority_queue<int> p;
int a;
for(int i=0;i<2*n;i++){
scanf("%d",&a);
p.push(a);
}
for(int i=0;i<2*n;i++){
if(i==n){cout<<p.top()<<endl; break;}
p.pop();
}
}
}
,网上有人用的是取半求中位数,为了偷懒,我就直接用C++中的优先队列容器了, 另一点需要注意的是这个题中的中位数 n为偶数时貌似取得是第n/2个数的值,与平常所定义的中位数略有不同。