Cod sursa(job #854380)
#include <cstdlib>
#include <cstdio>
#define nmax 100001
int v [ nmax ] , op , x , N , M , asd;
void caut_bin ( int stanga , int dreapta )
{
if ( stanga == dreapta )
{
asd = stanga ;
}
else
{
int mid = ( stanga + dreapta ) / 2 ;
if ( x <= v [ mid ] ) caut_bin ( stanga , mid ) ;
else caut_bin ( mid + 1 , dreapta ) ;
}
}
int main ()
{
FILE *fin , *fout ;
fin = fopen ( "cautbin.in" , "rt" ) ;
fout = fopen ( "cautbin.out" , "wt" ) ;
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 )
{
caut_bin ( 1 , N ) ;
while ( v [ asd + 1 ] == x && asd + 1 <= N ) asd++;
fprintf ( fout , "%d\n" , v [ asd ] == x ? asd : -1 ) ;
continue ;
}
if ( op == 1 )
{
caut_bin ( 1 , N ) ;
while ( v [ asd + 1 ] == x && asd + 1 <= N ) asd++;
fprintf ( fout , "%d\n" , v [ asd ] == x ? asd : asd - 1 ) ;
continue ;
}
caut_bin ( 1 , N ) ;
fprintf ( fout , "%d\n" , asd ) ;
}
fclose ( fin ) ;
fclose ( fout ) ;
return 0 ;
}