openjudge 01:查找最接近的元素
快NOIP了,可是还是好弱。
那……来一场愉快的二分之旅吧!
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
#define MAXN (100100)
int num[MAXN];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; ++ i) scanf("%d", &num[i]);
int m;
cin >> m;
while(m --)
{
int x, ans;
cin >> x;
int l = 1, r = n, mid;
if(x <= num[1]) {cout << num[1] << endl; continue;}
if(x >= num[n]) {cout << num[n] << endl; continue;}
while(l <= r)
{
mid = (l+r)>>1;
if(num[mid] <= x)
l = mid+1;
else r = mid-1;
}
// r <= l
if(abs(num[l]-x) < abs(num[r]-x))
ans = l;
else ans = r;
cout << num[ans] << endl;
}
return 0;
}
/*
10
0 1 2 5 6 7 11 13 19 20
-1
*/