Pagini recente » Cod sursa (job #1889582) | Cod sursa (job #2837148) | Cod sursa (job #1853356) | Cod sursa (job #2984052) | Cod sursa (job #251388)
Cod sursa(job #251388)
#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;
}
}