思路:将两个有序序列合并成一个有序序列,取中间的数即可。题目要求向上取整。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=200010;
int a[N],b[N],c[N*2];
int main(){
int n,m;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
cin>>m;
for(int i=0;i<m;i++)
cin>>b[i];
int mid=ceil((n+m)/2.0); //中间数,ceil向上取整
int k=0,i=0,j=0;
while(i<n&&j<m){ //合并有序序列
if(a[i]<=b[j]) c[k++]=a[i++];
else c[k++]=b[j++];
}
while(i<n) c[k++]=a[i++];
while(j<m) c[k++]=b[j++];
cout<<c[mid-1]<<endl; //从0开始,所以-1
}