Cod sursa(job #851076)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 9 ianuarie 2013 14:55:11
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.95 kb
#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 ;


}