Cod sursa(job #854368)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 13 ianuarie 2013 14:49:47
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#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++;
            fprintf ( fout , "%d\n" , v [ asd ] == x ? asd : -1 ) ;
            continue ;
        }
        if ( op == 1 )
        {
            caut_bin ( 1 , N ) ;
            while ( v [ asd + 1 ] == x ) asd++;
            fprintf ( fout , "%d\n" , v [ asd ] == x ? asd : asd ) ;
            continue ;
        }
        caut_bin ( 1 , N ) ;
        fprintf ( fout , "%d\n" , asd ) ;
    }

    fclose ( fin ) ;
    fclose ( fout ) ;

    return 0 ;
}