Cod sursa(job #268290)

Utilizator vlad_olteanVladimir Oltean vlad_oltean Data 1 martie 2009 00:23:45
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>

int v[100001],n,m;

int c1(int l,int r,int val)
{
	int m;
	while(l<r)
	{
		m=l+(r-l+1)/2;
		if(v[m]==val) return m;
		else
			if(v[m]>val) r=m-1;
			else l=m+1;
	}
	if(v[l]==val) return l;
	else return -1;
}

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

int c3(int l,int r,int val)
{
	int m;
	while(l<r)
	{
		m=l+(r-l-1)/2;
		if(v[m]>=val) r=m;
		else l=m+1;
	}
	return l;
}

int main()
{
	int a,x;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&v[i]);
	
	scanf("%d",&m);
	
	while(m)
	{
		scanf("%d %d",&a,&x);
		switch(a)
		{
			case 0:
				x=c1(1,n,x);
				printf("%d\n",x);
				break;
			case 1:
				x=c2(1,n,x);
				printf("%d\n",x);
				break;
			case 2:
				x=c3(1,n,x);
				printf("%d\n",x);
				break;
		}
		m--;
	}
	
	fclose(stdin); fclose(stdout);
	return 0;
}