Cod sursa(job #460142)
Utilizator | SAlexandru BitOne | Data | 1 iunie 2010 12:26:10 |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.51 kb |
#include <cstdlib>
#include <fstream>
#define Nmax 100111
/*
*
*/
int main( void )
{
int v[Nmax];
int N, M, i, j, z, left, right, middle;
std::ifstream in( "cautbin.in" );
in>>N;
for( i=1; i <= N; ++i )
in>>v[i];
std::ofstream out( "cautbin.out" );
for( in>>M; M; --M )
{
in>>i>>j;
z=-1;
left=1; right=N;
while( left <= right )
{
middle=left+(right-left)/2;
if( 0 == i )
{
if( j == v[middle] )
{
z=middle;
}
if( j < v[middle] )
right=middle-1;
else left=middle+1;
}
else if( 1 == i )
{
if( j >= v[middle] )
{
if( -1 == z || z < middle )
z=middle;
left=middle+1;
}
else right=middle-1;
}
else if( 2 == i )
{
if( j <= v[middle] )
{
if( -1 == z || z > middle )
z=middle;
right=middle-1;
}
else left=middle+1;
}
}
out<<z<<'\n';
}
return EXIT_SUCCESS;
}