题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1240
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
int m;
scanf("%d", &m);
while (m--)
{
int x;
scanf("%d", &x);
if (x <= a[0])
{
printf("%d\n", a[0]);
}
else if (x >= a[n - 1])
{
printf("%d\n", a[n - 1]);
}
else
{
// 查找大于等于x的数中最小的
int l = 0, r = n - 1;
while (l < r)
{
int mid = l + r >> 1;
if (a[mid] >= x) r = mid;
else l = mid + 1;
}
if (x - a[l - 1] <= a[l] - x)
{
printf("%d\n", a[l - 1]);
}
else
{
printf("%d\n", a[l]);
}
}
}
return 0;
}