Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int binarysearch(int K, int* array, int N){
- int l = 0, R = N - 1;
- int m = l + (R - l) / 2;
- while(R >= l){
- m = l + (R - l) / 2;
- if(K > array[m]){
- l = m + 1;
- } else {
- R = m - 1 ;
- }
- }
- if(N == 1){
- return array[0];
- }
- if(N == 2){
- int k1 = abs(array[0] - K);
- int k2 = abs(array[1] - K);
- if (k1 == min(k1, k2)) {
- return array[0];
- } else {
- return array[1];
- }
- }
- if (m >= 1 && m <= N - 2) {
- int k1 = abs(array[m - 1] - K);
- int k2 = abs(array[m] - K);
- int k3 = abs(array[m + 1] - K);
- if(k1 == min(k1, min(k2, k3))){
- return array[m - 1];
- }
- if(k2 == min(k1, min(k2, k3))){
- return array[m];
- }
- if(k3 == min(k1, min(k2, k3))){
- return array[m + 1];
- }
- } else if (m == 0) {
- int k2 = abs(array[m] - K);
- int k3 = abs(array[m + 1] - K);
- if (k2 == min(k2, k3)) {
- return array[m];
- } else {
- return array[m + 1];
- }
- } else if (m == N - 1) {
- int k1 = abs(array[m - 1] - K);
- int k2 = abs(array[m] - K);
- if (k1 == min(k1, k2)) {
- return array[m - 1];
- } else {
- return array[m];
- }
- }
- }
- int main() {
- int N, K;
- cin >> N >> K;
- int array[N];
- for(int i = 0; i < N; i++){
- cin >> array[i];
- }
- int Z;
- while(K > 0){
- cin >> Z;
- cout << (binarysearch(Z, array, N)) << endl;
- K--;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement