Cod sursa(job #307794)

Utilizator cotofanaCotofana Cristian cotofana Data 24 aprilie 2009 23:04:45
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <stdio.h>
#define dim 100100

int n, m, v[dim], logn;

int main()
{
	int i, op, x, lg;
	freopen("cautbin.in", "r", stdin);
	freopen("cautbin.out", "w", stdout);
	scanf("%d\n", &n);
	for (logn=1; logn<=n; logn<<=1);
	for (i=1; i<=n; i++) scanf("%d ", &v[i]);
	scanf("%d\n", &m);
	for (; m; m--)
	{
		scanf("%d %d\n", &op, &x);
		if (op<2)
		{
			for (i=0, lg=logn; lg; lg>>=1)
				if (i+lg<=n && v[i+lg]<=x)
					i+=lg;
			if (!op && v[i]!=x) printf("-1\n");
			else printf("%d\n", i);
			continue;
		}
		for (i=n, lg=logn; lg; lg>>=1)
			if (i-lg>0 && v[i-lg]>=x)
				i-=lg;
		printf("%d\n", i);
	}
	return 0;
}