Cod sursa(job #323123)

Utilizator GulyanAlexandru Gulyan Data 10 iunie 2009 20:38:44
Problema Cautare binara Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <stdlib.h>

#define SMAX 100000

int v[SMAX];

int bs(int e, int n)
{
	int s = 0;
	int d = n-1;
	int m;
	while(s <= d){
		m = (s + d) / 2;
		if(v[m] == e)
			return m;
		else if(e < v[m])
			d = m - 1;
		else 
			s = m + 1;
	}
	return d;
}

int main()
{
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	int i, n, m, c, x, p;
	scanf("%d", &n);
	for(i = 0; i < n; ++i)
		scanf("%d", v+i);

	scanf("%d", &m);
	
	for(i = 0; i < m; i++){
		scanf("%d%d", &c, &x);
		p = bs(x, n);
		if(c == 0 ){
			while(p < n-1 && v[p+1] == x)
				p++;
			if(v[p] == x)
				printf("%d\n", p+1);
			else
				printf("-1\n");
		}
		else if(c == 1 ){
			while(p > 0 && v[p] == x)
				p--;
			printf("%d\n", p+1);
		}
		else if(c == 2 ){
			while(p < n-1 && v[p] == x)
				p++;
			printf("%d\n", p+1);
		}
	}

	return 0;
}