4134:查找最接近的元素(二分查找)
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
在一个非降序列中,查找与给定值最接近的元素。
- 输入
- 第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。
第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。 - 输出
- m行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。
- 样例输入
-
3 2 5 8 2 10 5
- 样例输出
-
8 5
#include <bits/stdc++.h> using namespace std; int a[100005],d,n,k; int BinarySearch(int left,int right) { int mid; while(left<=right) { mid=left+(right-left)/2; if(a[mid]==d)return a[mid]; else if(a[mid]<d)left=mid+1; else right=mid-1; } if(left==0)return a[left]; else return abs(a[left]-d)<abs(a[left-1]-d)?a[left]:a[left-1]; } int main() { scanf("%d",&n); for(int i=0; i<n; i++)scanf("%d",&a[i]); scanf("%d",&k); while(k>0) { scanf("%d",&d); printf("%d\n",BinarySearch(0,n-1)); k--; } }
越努力越幸运

浙公网安备 33010602011771号