Cod sursa(job #284283)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 21 martie 2009 15:57:23
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>

const int N = 100001;

int v[N],n,m;

int cautare_binara(int nr,int l1,int l2, int tip)  
{
	if (tip == 0)
	{
		int m;
		++nr;
		while(l1!=l2)
		{  
			m=(l1+l2)/2;  
			if(nr<=v[m])  
				l2=m;  
			else  	
				l1=1+m;  
		}
		--nr;
		if (v[l1] > nr)
			--l1;
		if (v [l1] != nr)
			return -1;
		return l1;  
	}
	if (tip == 1)
	{
		int m;
		while(l1!=l2)  
		{  
			m=(l1+l2)/2;  
			if(nr<=v[m])  
				l2=m;  
			else  
				l1=1+m;  
		}
		if (v[l1] > nr)
			--l1;
		return l1;
	}
	
	int m;
	while (l1!=l2)
	{
		m = (l1+l2)/2;
		if (nr<=v[m])
			l2 = m;
		else
			l1 = m + 1;
	}
	return l1;
}

void citire()
{
	int tip,x,i;
	scanf ("%d",&n);
	for (i = 1; i <= n; ++i)
		scanf ("%d",&v[i]);
	scanf ("%d",&m);
	for (i = 1; i <= m; ++i)
	{
		scanf ("%d%d",&tip,&x);
		printf ("%d\n",cautare_binara(x,1,n,tip));
	}
}

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