Binary Search - B

public
yeskendir.sultanov Mar 31, 2024 Never 118
Clone
C++ Bbinsearch.cpp 63 lines (55 loc) | 1.13 KB
1
#include <bits/stdc++.h>
2
3
using namespace std;
4
5
int main() {
6
std::ios_base::sync_with_stdio(false);
7
cin.tie(0);
8
cout.tie(0);
9
int n, k;
10
cin >> n >> k;
11
int a[n];
12
for (int i = 0; i < n; ++i) {
13
cin >> a[i];
14
}
15
16
for (int i = 0; i < k; ++i) {
17
int x;
18
cin >> x;
19
// [0; n - 1]
20
int L = 0, R = n - 1, j = n;
21
// a[j - 1] < x <= a[j] ... a[mid]
22
23
while (L <= R) {
24
int mid = (L + R) / 2;
25
if (x <= a[mid]) {
26
j = mid;
27
R = mid - 1;
28
} else {
29
L = mid + 1;
30
}
31
}
32
33
if (j == n) {
34
cout << a[n - 1] << endl;
35
} else if (j == 0) {
36
cout << a[0] << endl;
37
} else if (x - a[j - 1] <= a[j] - x) {
38
cout << a[j - 1] << endl;
39
} else {
40
cout << a[j] << endl;
41
}
42
}
43
44
return 0;
45
}
46
47
/*
48
5
49
0 1 2 3 4
50
1 3 5 8 9
51
5
52
2
53
7
54
9
55
100
56
1
57
a[j - 1] < x <= a[j]
58
x <= a[0]
59
60
a[0] < 2 <= a[1]
61
a[2] < 7 <= a[3]
62
a[3] < 9 <= a[4]
63
*/
64
65
66