关于c语言的一个程序(二分法)

img


img


用二分法解决这道题!

#include <stdio.h>
#include <stdlib.h>
int a[1000000];
int main() {
    int i, n, t, t1, t2, start = -1, end = -1, flag = -1;
    scanf("%d", &n);
    for(i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    scanf("%d", &t);
    int l = 0, r = n - 1, m;
    while(l <= r) {

        m = (l + r) / 2;
        if(a[m] == t) {
            flag = 1;
            t1 = m;
            t2 = m;
            while(t1 >= 0 && a[t1] == t) {
                t1--;
            }
            start = ++t1;
            while(t2 <= n - 1 && a[t2] == t) {
                t2++;
            }
            end = --t2;
        
            break;
        } else if(a[m] > t) {
            r = m - 1;
        } else if(a[m] < t) {
            l = m + 1;
        }
    }
    if(flag!=-1)
        printf("%x%04x", start, end);
    else
        printf("%X", flag);
    return 0;
}

同样的题用二分法?