Cod sursa(job #209703)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 24 septembrie 2008 11:41:17
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream.h>

long n,a[100],i,m,st,dr,mij;

long binar1(long x);
long binar2(long x);
long binar3(long x);

int main()
{

	ifstream f("cautbin.in");
	ofstream g("cautbin.out");

	long o,x;

	f>>n;
	for(i=1;i<=n;i++)
		f>>a[i];
	f>>m;
	for(i=1;i<=m;i++)
		{
		f>>o>>x;
		if(o==0)
			g<<binar1(x)<<"\n";
		if(o==1)
			g<<binar2(x)<<"\n";
		if(o==2)
			g<<binar3(x)<<"\n";
		}
return 0;
}

long binar1(long x)
{
	st=1;dr=n;
	while(st<=dr)
		{
		mij=(st+dr)/2;
		if(a[mij]==x)
			{
			while(a[mij]==x)  mij++;
			return mij-1;
			}
		else
			if(a[mij]<x)
				st=mij+1;
			else
				dr=mij-1;
		}
	if(st>dr) 	return -1;

}

long binar2(long x)
{
	st=1;dr=n;
	while(st<=dr)
		{
		mij=(st+dr)/2;
		if(a[mij]==x)
			return mij;
		else
			if(a[mij]<x)
				st=mij+1;
			else
				dr=mij-1;
		}
return st-1;
}
long binar3(long x)
{
	st=1;dr=n;
	while(st<=dr)
		{
		mij=(st+dr)/2;
		if(a[mij]==x)
			return mij;
		else
			if(a[mij]<x)
				st=mij+1;
			else
				dr=mij-1;
		}
return dr+1;
}