UvaOJ 10474 Where is the Marble?

快排+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);
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章