Cod sursa(job #251388)

Utilizator Nickyu0712Nichita Utiu Nickyu0712 Data 2 februarie 2009 14:58:18
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream.h>

ifstream fin( "cautbin.in" );
ofstream fout( "cautbin.out" );

long n, m, a[ 100 ];

long cautbin0( int x );
long cautbin1( int x );
long cautbin2( int x );

int main()
{
	fin >> n;
	for( long i = 1; i <= n; i++ )
		fin >> a[ i ];
	int var, caut;
	long result;
        fin >> m;
	for( i = 1; i <= m; i++ )
	{
		fin >> var >> caut;
		if( var == 0 )
			result = cautbin0( caut );
		if( var == 1 )
			result = cautbin1( caut );
		if( var == 2 )
			result = cautbin2( caut );
		fout << result << '\n';
	}
	fin.close();
	fout.close();
	return 0;
}

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

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

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