Cod sursa(job #268283)

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

int v[100001],n,m;
int a,x;

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

int c2(int l,int r,int val)
{
	int m;
	while(l<r)
	{
		m=l+(r-l+1)/2;
		if(!(v[m]<=x)) 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]>=x) r=m;
		else l=m+1;
	}
	return l;
}

int main()
{
	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:
				printf("%d\n",c1(1,n,x));
				break;
			case 1:
				printf("%d\n",c2(1,n,x));
				break;
			case 2:
				printf("%d\n",c3(1,n,x));
				break;
		}
		m--;
	}
	
	fclose(stdin); fclose(stdout);
	return 0;
}