Cod sursa(job #218570)

Utilizator plastikDan George Filimon plastik Data 2 noiembrie 2008 16:24:48
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
// http://infoarena.ro/problema/cautbin

#include <cstdio>

const int NMAX = 100000;

int n;
int A[NMAX];

int binarySearch(int op, int key) {
	int l, r, m, ans = -1;
	l = 0, r = n - 1;
	
	while (l <= r) {
		m = (r - l) / 2 + l;
		if (key < A[m]) {
			r = m - 1;
			if (op == 2)
				ans = m;
		} else {
			l = m + 1;
			if (op == 1)
				ans = m;
		}
		if (key == A[m]) {
			return m;
		}
	}
	return ans;
}

int main() {
	
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	
	scanf("%d", &n);
	int i;
	for (i = 0; i < n; ++ i)
		scanf("%d", &A[i]);
	
	int m, op, key, ans;
	scanf("%d", &m);
	for (i = 0; i < m; ++ i) {
		scanf("%d %d", &op, &key);
		ans = binarySearch(op, key);
		if (ans == -1)
			printf("-1\n");
		else
			printf("%d\n", ans + 1);
	}
	
	return 0;
}