Pagini recente » Cod sursa (job #2448005) | Cod sursa (job #1566057) | Cod sursa (job #1714798) | Profil anna.i | Cod sursa (job #851076)
Cod sursa(job #851076)
#include <cstdlib>
#include <cstdio>
#define nmax 100001
int N , M , op , x , rez ;
int v[nmax] ;
void cautare_binara ( int stanga , int dreapta )
{
if ( stanga == dreapta ) rez = stanga ;
else
{
int mid = ( stanga + dreapta ) / 2 ;
if ( x <= v[mid] ) cautare_binara ( stanga , mid ) ;
else cautare_binara ( mid + 1 , dreapta ) ;
}
}
int main ()
{
FILE *fin , *fout ;
fin = fopen ( "cautbin.in" , "rt" ) ;
//fout = fopen ( "cautin.out" , "wt" ) ;
freopen ( "cautbin.out" , "wt" , stdout ) ;
fscanf ( fin , "%d" , &N ) ;
for ( int i = 1 ; i <= N ; i++ )
fscanf ( fin , "%d " , &v[i] ) ;
fscanf ( fin , "%d" , &M ) ;
for ( int i = 1 ; i <= M ; i++ )
{
fscanf ( fin , "%d %d " , &op , &x ) ;
if ( !op )
{
rez = 0;
cautare_binara ( 1 , N ) ;
if ( v[rez] != x ) printf ( "-1" );
else
{
while ( x == v[rez + 1] ) rez++ ;
printf ( "%d\n" , rez ) ;
}
continue;
}
if ( op == 1 )
{
rez = 0 ;
cautare_binara ( 1 , N ) ;
if ( v[rez] != x ) printf ( "%d\n" , rez ) ;
else
{
while ( x == v[rez + 1] ) rez++ ;
printf ( "%d\n" , rez ) ;
}
}
if ( op == 2 )
{
rez = 0 ;
cautare_binara ( 1 , N ) ;
if ( v[rez] != x ) printf ( "%d\n" , rez + 1 ) ;
else printf ( "%d\n" , rez ) ;
continue;
}
}
fclose ( fin ) ;
// fclose ( fout );
return 0 ;
}