algorithm'''problem solve
[백준]10816-숫자 카드2(설명X)
JunHwa Park
2020. 2. 1. 19:16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <cstdio>
#include <algorithm>
using namespace std;
int binary_search(int* arr, int start, int end, int number) {
int position = (start + end) / 2;
if (start > end)
return 0;
else if (arr[position] == number) {
if (arr[start] == number) {
return position - start + 1 + binary_search(arr, position + 1, end, number);
}
if (arr[end] == number) {
return end - position + 1 + binary_search(arr, start, position - 1, number);
}
return binary_search(arr, start, position - 1, number) + binary_search(arr, position + 1, end, number) + 1;
}
else if (arr[position] > number)
return binary_search(arr, start, position - 1, number);
else
return binary_search(arr, position + 1, end, number);
}
int main() {
int N, M, tmp;
scanf("%d", &N);
int* arr = new int[N];
for (size_t i = 0; i < N; i++)
scanf("%d", &arr[i]);
sort(arr, arr + N);
scanf("%d", &M);
for (size_t i = 0; i < M; i++) {
scanf("%d", &tmp);
int range = binary_search(arr, 0, N - 1, tmp);
printf("%d ", range);
}
return 0;
}
|
cs |