Cod sursa(job #391646)

Utilizator ooctavTuchila Octavian ooctav Data 5 februarie 2010 23:51:44
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#define NMAX 100001
int e[NMAX];
int n,m;

int caz0(int x)
{
	int p=1,a=0;
	while((p<<1)<=n)
		p<<=1;
	while(p)
	{
		if(a+p<=n && e[a+p]<=x)
			a+=p;
		p>>=1;
	}
	if(e[a]==x)
		return a;
	return -1;
}

int caz1(int x)
{
	int p=1,a=0;
	while((p<<1)<=n)
		p<<=1;
	while(p)
	{
		if(a+p<=n && e[a+p]<=x)
			a+=p;
		p>>=1;
	}
	return a;
}

int caz2(int x)
{
	int p=1,a=0;
	while((p<<1)<=n)
		p<<=1;
	while(p)
	{
		if(a+p<=n && e[a+p]<x)
			a+=p;
		p>>=1;
	}
	return a+1;
}

void citire()
{
	int iden,x;
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&e[i]);
	scanf("%d",&m);
	
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&iden,&x);
		if(iden==0)
			printf("%d\n",caz0(x));
		if(iden==1)
			printf("%d\n",caz1(x));
		if(iden==2)
			printf("%d\n",caz2(x));
	}
}

int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	citire();
	
	return 0;
}