【1029 25 排序 双指针】 Median

传送门

题意

给定 \(n,m\) ,表示两个升序序列的长度,求出合并后的中位数

数据范围

\(n,m\leq 10^{5}\)

题解

  • 直接排序
  • 计算出中位数的位置,双指针在两个序列总取数字

Code

#include <bits/stdc++.h>
using namespace std;

#define ll long long

int main() {
	int n; cin >> n;
	vector<ll> a(n);
	for (int i = 0; i < n; i++) cin >> a[i];
	cin >> n;
	vector<ll> b(n);
	for (int i = 0; i < n; i++) cin >> b[i];
	int mid = (a.size() + b.size() + 1) / 2;
	int i = 0, j = 0, ans = 0;

	for (int k = 0; k < mid; k++) {
		ll x = i < a.size() ? a[i] : INT_MAX;
		ll y = j < b.size() ? b[j] : INT_MAX;
		if (x < y) ans = a[i++];
		else ans = b[j++];
	}
	cout << ans;
}
posted @ 2021-02-18 18:09  Hyx'  阅读(56)  评论(0)    收藏  举报