P1747 单调不降序列中与x最接近元素

#include<iostream>
using namespace std;
int arr[100010];
int main()
{
    int n;
    cin >> n;
    int i;
    for (i = 1; i <= n; i++)
    {
        cin >> arr[i];        //输入非降序列
    }
    int m;
    cin >> m;
    while (m--)                //输入x
    {
        int flag = 0;        //标志变量
        int k;                //x(不小心设成了k),以下k均代表x
        cin >> k;
        
        //二分查找k
        
        int left = 1, right = n;
        while (left + 1 < right)
        {
            int mid = (left + right) / 2;
            //如果找到k,那么标志变量变成1,退出查找找,与x最接近的就是查找到的这个数
            if (arr[mid] == k)
            {
                flag = 1;
                break;
            }
            if (arr[mid] < k)        left = mid;
            else                            right = mid;
        }
        // 在序列中查找到k
        if (flag)            cout << k << endl;
        //未查找到k的话,判断此时arr[left]-k和arr[left+1]-k哪个小,输出较小的那个
        else if (abs(arr[left] - k) <= abs(arr[left + 1] - k))        cout << arr[left] << endl;
        else cout << arr[left + 1] << endl;
    }
    return 0;
}

 

posted @ 2023-05-23 15:00  刘海烽  阅读(69)  评论(0)    收藏  举报