Cod sursa(job #261635)

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

int n , X [ 1005 ] , x ;

int cautare ( int val )
   {

      int 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 ;


   }

int cautare1 ( int val )
   {

      int 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 ( "%d" , & n ) ;

      int i , m , nr1 , nr , y ;

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

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

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

         }


      return 0 ;

   }