快排+lowerbound
注意lowerbound的寫法即可
#include <stdio.h>
#include <stdlib.h>
int a[10010], n, x;
int cmp(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
int lowerbound() {
int i = 0, j = n-1;
while (i <= j) {
int m = i+j>>1;
if (a[m] >= x)
j = m-1;
else
i = m+1;
}
return i;
}
int main() {
int c, l, i;
for (c=1 ; scanf("%d%d", &n, &l) != EOF && (n || l) ; c++) {
printf("CASE# %d:\n", c);
for (i=0 ; i<n ; i++)
scanf("%d", a+i);
qsort(a, n, sizeof(int), cmp);
while (l--) {
scanf("%d", &x);
int res = lowerbound();
if (a[res] == x)
printf("%d found at %d\n", x, res+1);
else
printf("%d not found\n", x);
}
}
}