Cod sursa(job #222374)

Utilizator cotofanaCotofana Cristian cotofana Data 21 noiembrie 2008 23:56:52
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>

long n, a[100001], no;
long binary_search(long val)
{
    long i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = 0; step; step >>= 1)
	if (i + step < n && a[i + step] <= val)
		i += step;
    return i;
}

int main()
{
	long i, o, p, in;
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	scanf("%ld\n", &n);
	for (i=0; i<n; i++) scanf("%ld ", &a[i]);
	scanf("%ld\n", &no);
	for (i=0; i<no; i++)
	{
		scanf("%ld %ld\n", &o, &p);
		if (o==0)
		{
			in=binary_search(p);
			if (a[in]!=p) printf("-1\n");
			else printf("%ld\n", in+1);
                }
		if (o==1)
		{
			in=binary_search(p);
			if (a[in]!=p) printf("%ld\n", in+1);
			else printf("%ld\n", in+1);
		}
		if (o==2)
		{
			in=binary_search(p);
			if (a[in]==p) printf("%ld\n", in+1);
			else printf("%ld\n", in+2);
		}
	}
	return 0;
}