已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A_0, A_1, /cdots, A_{N-1}A0,A1,⋯,AN−1的中位数指A_{(N-1)/2}A(N−1)/2的值,即第/lfloor(N+1)/2/rfloor⌊(N+1)/2⌋个数(A_0A0为第1个数)。
输入分三行。第一行给出序列的公共长度N(0<<N/le≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。
在一行中输出两个输入序列的并集序列的中位数。
51 3 5 7 92 3 4 5 6输出样例1:
4输入样例2:
6-100 -10 1 1 1 1-50 0 2 3 4 5输出样例2:
1
#include<stdio.h>#define max 100005int main(){ int n; int a[max],b[max]; scanf("%d",&n); int i; for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(i=0;i<n;i++){ scanf("%d",&b[i]); } int c[max*2]; i=0; int j=0,count=0; while(i<n&&j<n){ if(a[i]<b[j]) c[count++]=a[i++]; else c[count++]=b[j++]; } PRintf("%d",c[(2*n-1)/2]); return 0;}
新闻热点
疑难解答