Untitled
unknown
plain_text
2 years ago
1.6 kB
12
Indexable
#include <stdio.h>
void merge(int A[], int B[], int n, int m, int *C) {
int i = 0, j = 0, k = 0;
while (i < n && j < m) {
if (A[i] <= B[j]) {
C[k] = A[i];
i++;
} else {
C[k] = B[j];
j++;
}
k++;
}
while (i < n) {
C[k] = A[i];
i++;
k++;
}
while (j < m) {
C[k] = B[j];
j++;
k++;
}
}
int search(int arr[], int n, int k) {
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == k) {
return mid;
} else if (arr[mid] < k) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
int n, k;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
int n1 = n / 2;
int n2 = n - n1;
int A[n1];
int B[n2];
for (int i = 0; i < n1; i++) {
A[i] = arr[i];
}
for (int i = n1; i < n; i++) {
B[i - n1] = arr[i];
}
int C[n];
merge(A, B, n1, n2, C);
scanf("%d", &k);
int pos_a = search(A, n1, k);
int pos_b = search(B, n2, k);
if (pos_a != -1) {
printf("A\n");
printf("%d\n",pos_a);
} else if (pos_b != -1) {
printf("B\n");
printf("%d\n" , pos_b );
} else {
printf("-1");
}
int pos_c = search(C, n, k);
if (pos_c != -1) {
printf("%d\n",pos_c);
}
return 0;
}
Editor is loading...