Cod sursa(job #280451)

Utilizator mircea_infoSuciu Mircea-Gabriel mircea_info Data 13 martie 2009 13:19:58
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
//cautare binara bc

#include <stdio.h>
#define nmax 100001

int a[nmax],n,m;

int main()
{
	int i,x,val,step,j;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	scanf("%d",&m);
	for(step=1;step<=n;step*=2);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&val);
		if(x==0 || x==1)
		{
			for(j=step,i=0;j;j/=2)
				if(i+j<=n && a[i+j]<=val)
					i+=j;
			if(x==0 && a[i]!=val)
				printf("-1\n");
			else
				printf("%d\n",i);
			continue;
		}
		for(j=step,i=n;j;j/=2)
			if(i-j>0 && a[i-j]>=val)
				i-=j;
		printf("%d\n",i);
	}
	fclose(stdout);
	return 0;
}