Cod sursa(job #256708)

Utilizator alex.cepoiAlexandru Cepoi alex.cepoi Data 12 februarie 2009 00:42:06
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>

int N, M, a[100001], Npow=1;

int bsearch (int x)
{
	int trep=0;
	for (int step=Npow; step; step>>=1)
		if (trep+step <= N && a[trep+step] <= x)
			trep+=step;

	return trep;
}

int main ()
{
	freopen ("cautbin.in","r",stdin);
	freopen ("cautbin.out","w",stdout);

	scanf ("%d", &N);
	for (int i=1; i<=N; ++i)
		scanf ("%d", &a[i]);

	while (Npow<<1 <= N) Npow<<=1;

	scanf ("%d", &M);
	for (int i=0; i<M; ++i)
	{
		int tmp, target; scanf ("%d%d", &tmp, &target);
		int trep=bsearch(target);
		switch (tmp)
		{
			case 0: printf ("%d\n", a[trep]==target ? trep:-1); break;
			case 1: printf ("%d\n", trep); break;
			case 2: printf ("%d\n", a[trep]>=target ? trep:trep+1); break;
		}
	}

	return 0;
}