Cod sursa(job #2305492)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 20 decembrie 2018 12:59:43
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std ;

const int NR = 100005 ;

ifstream f ("cautbin.in");
ofstream g ("cautbin.out");

int v [ NR ] ;
int n , q ;

int bs0 ( int val )
{
    int i , step ;
    
    for ( step = 1 ; step < n ; step <<= 1 ) ;
    for ( i = 0 ; step ; step >>= 1 )
    if ( i + step < n && v [ i + step ] <=  val  )
    i += step ;
    if ( v [ i ] != val )  return -1 ;
    return  i ;
}

int bs1 ( int val ) 
{
    int i , step ;
    
    for ( step = 1 ; step < n ; step <<= 1 ) ;
    for ( i = 0 ; step ; step >>= 1 )
    if ( i + step < n && v [ i + step ] <=  val  )
    i += step ;
    return i ;
}
    
int bs2 ( int val ) 
{
    int i , step ;
    
    for ( step = 1 ; step < n ; step <<= 1 ) ;
    for ( i = 0 ; step ; step >>= 1 )
    if ( i + step < n && v [ i + step ] <  val  )
    i += step ;
    return i + 1 ;
}

int main ()
{
     f >> n ;
    
    for ( int i = 1 ; i <= n ; ++ i )   f >> v [ i ] ;
    f >> q ;
    while ( q -- )
    {
        int type , value ;
        f >> type >> value ;
        if ( type == 0 )    g << bs0 ( value ) << "\n" ;
        if ( type == 1 )    g << bs1 ( value ) << "\n" ;
        if ( type == 2 )    g << bs2 ( value ) << "\n" ;
    }
}