Cod sursa(job #484229)

Utilizator Athena99Anghel Anca Athena99 Data 12 septembrie 2010 22:20:47
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>

int i,n,x,v[100001],r,l=1,a,b,y,t,z,j;

int cb1(int x)
{
	int m=l+(l+r)/2;
	while (v[m]!=x && l<r)
		  {
		   if (v[m]<x) l=m+1;
		   else r=m-1;
		   m=l+(l+r)/2;
		  }
	if (v[m]==x) return m;
	else return -1;
}

int cb2(int x)
{
	int m=l+(l+r)/2;
	while (v[m]!=x && l<r)
		  {
		   if (v[m]<x) l=m+1;
		   else r=m-1;
		   m=l+(l+r)/2;
		  }
	return m;
}

int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	r=n;
	for (i=1; i<=n; ++i) scanf("%d",&v[i]);
	scanf("%d",&y);
	for (i=1; i<=y; ++i)
		{
		 scanf("%d%d",&t,&z);
		 if (t==0)
			{
			 x=z;
			 printf("%d\n",cb1(x));
			}
			else if (t==1)
					{
					 x=z;
					 printf("%d\n",cb2(x));
					}
					else
						{
						 x=z;
						 a=cb1(x);
						 b=cb2(x);
						 if (b!=a) printf ("%d",b);
							else for (j=1; j<=n; ++j)
									 if (v[j]==x)
										{
										 printf("%d",j);
										 break;
										}
					   }
		}
	return 0;
}