完善程序第一题
  • 板块灌水区
  • 楼主Zlc晨鑫
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/9/18 18:51
  • 上次更新2023/10/27 10:46:16
查看原帖
完善程序第一题
297555
Zlc晨鑫楼主2022/9/18 18:51
#include <cstdio>
#include <iostream>

using namespace std;

const int N = 100010;

int a[N], b[N];

int solve(int *a1, int *a2, int n, int k)
{
    int left1 = 0, right1 = n - 1;
    int left2 = 0, right2 = n - 1;
    while (left1 <= right1 && left2 <= right2)
    {
        int m1 = (left1 + right1) >> 1;
        int m2 = (left2 + right2) >> 1;
        int cnt = m1 + m2;
        if (a1[m1] <= a2[m2])
        {
            if (cnt < k) left1 = m1 + 1;
            else right2 = m2 - 1;
        }
        else
        {
            if (cnt < k) left2 = m2 + 1;
            else right1 = m1 - 1;
        }
    }
    if (left1 > right1)
    {
        if (left1 == 0) return a2[k - 1];
        else
        {
            int x = a1[left1 - 1], y = a2[k - left1 - 1];
            return max(x, y);
        }
    }
    else 
    {
        if (left2 == 0) return a1[k - 1];
        else
        {
            int x = a2[left2 - 1], y = a1[k - left2 - 1];
            return max(x, y);
        }
    }
}

int main()
{
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; i ++ ) cin >> a[i];
    for (int i = 0; i < n; i ++ ) cin >> b[i];
    cout << solve(a, b, n, k);
    return 0;
}
2022/9/18 18:51
加载中...