Cod sursa(job #261644)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 18 februarie 2009 16:55:49
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include<stdio.h>

long n , X [ 100005 ] , x ;

long cautare ( long val )
   {

      long st , dr , m ;
      st = 1 ; dr = n ;

      while ( st <= dr )
           {

             m = ( st + dr ) / 2 ;
             if ( X[m] == val ) return m ;
             if ( val >= X [ m ] )
                  st = m + 1 ;
             else
                  dr = m - 1 ;

           }
      if ( x == 0 && st >dr ) return -1 ;
      return st ;


   }

long cautare1 ( long val )
   {

      long st , dr , m ;
      st = 1 ; dr = n ;

      while ( st <= dr )
           {

             m = ( st + dr ) / 2 ;
             if ( val <= X [ m ] )
                  dr = m - 1 ;
             else
                  st = m + 1 ;

           }
      return st ;

   }

int main ( )
   {

      freopen ( "cautbin.in" , "r" , stdin ) ;
      freopen ( "cautbin.out" , "w" , stdout ) ;

      scanf ( "%ld" , & n ) ;

      long i , m , nr1 , nr , y ;

      for ( i = 1 ; i <= n ; i ++ )
         scanf ( "%ld" , & X [ i ] ) ;

      scanf ( "%ld" , & m ) ;
      for ( i = 1 ; i <= m ; i ++ )
         {

             scanf ( "%ld%ld" , & x , & y ) ;
             nr = cautare ( y ) ;
             nr1 = cautare1 ( y ) ;
             if ( x == 0 )
               { printf ( "%ld\n" , nr ) ; }
             else
             {
                if ( x == 2 )
                   { printf ( "%ld\n" , nr ) ; }
                else
                if ( x == 1 )
                   { printf ( "%ld\n" , nr1 -1 ) ;  }
             }

         }

      return 0 ;

   }