#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;
}
同样的题用二分法?