Cod sursa(job #239062)

Utilizator drag0s93Mandu Dragos drag0s93 Data 3 ianuarie 2009 23:38:14
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<stdio.h>
int n,m,v[100000],x,intr,t,p,u;
void vector()
{
	for(int i=0;i<n;++i)
		scanf("%d",&v[i]);
}
void intrebari()
{
	int ok=0;
	scanf("%d",&m);
	for(int i=0;i<m;++i)
	{
		scanf("%d%d",&intr,&x);
		if(intr==0)
		{
			if(x>=v[0] && x<=v[n-1])
			{
				p=0;
				u=n-1;
				ok=0;
				do
				{
					t=(p+u)/2;
					if(x==v[t])
					{
						ok=1;
						break;
					}
					else if(x<v[t])
						u=t-1;
					else p=t+1;
				}
				while(!(ok || p>u));
				if(ok==1)
					printf("%d\n",t+1);
				else printf("-1");
			}
		}
		if(intr==1)
		{
			if(x>=v[0] && x<=v[n-1])
			{
				p=0;
				u=n-1;
				ok=0;
				do
				{
					t=(p+u)/2;
					if(x==v[t])
					{
						ok=1;
						break;
					}
					else if(x<v[t])
						u=t-1;
					else p=t+1;
				}
				while(!(ok|| p>u));
				printf("%d\n",t);
			}
		}
		else if(intr==2)
		{
			if(x>=v[0] && x<=v[n-1])
			{
				p=0;
				u=n-1;
				ok=0;
				do
				{
					t=(p+u)/2;
					if(x==v[t])
					{
						ok=1;
						break;
					}
					else if(x<v[t])
						u=t-1;
					else p=t+1;
				}
				while(!(ok || p>u));
				printf("%d\n",t+1);
			}
		}
	}
}
int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	vector();
	intrebari();
	return 0;
}