#include<stdio.h>

void Search(int a[], int n, int x, int *i, int *j) {
    int start = 0, end = n - 1;
    *i = -1;
    *j = -1;

    while (start <= end) {
        int mid = start + (end - start) / 2;

        if (a[mid] == x) {
            *i = mid; // 找到目标元素
            *j = mid; // 初始化 *j
            // 向左查找相同元素
            while (*i > 0 && a[*i - 1] == x) {
                (*i)--;
            }
            // 向右查找相同元素
            while (*j < n - 1 && a[*j + 1] == x) {
                (*j)++;
            }
            return;
        } else if (a[mid] < x) {
            start = mid + 1;
            *i = mid; // 可能是小于 x 的最大元素
        } else {
            end = mid - 1;
            *j = mid; // 可能是大于 x 的最小元素
        }
    }
}

int main() {
    int a[] = {2, 4, 6, 8, 9, 10, 12, 13};
    int x = 7;
    int n = sizeof(a) / sizeof(a[0]);
    int i, j;

    Search(a, n, x, &i, &j);
    if (i == -1 && j == -1) {
        printf("未找到%d的信息\n", x);
    } else if (i == j) {
        printf("目标元素%d位于%d\n", x, i);
    } else {
        printf("未找到目标元素%d的值\n", x);
        printf("小于%d的最大元素位置%d\n", x, i);
        printf("大于%d的最小元素位置%d\n", x, j);
    }
}
