Cod sursa(job #2276814)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 5 noiembrie 2018 14:08:31
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <vector>
#define ll int

using namespace std ;

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

const int NR = 100005 ;

vector < ll > v ( NR ) ;

ll bs0 ( ll st , ll dr , ll val )
{
    if ( st == dr || st + 1 == dr )
    {
        if ( v [ dr ] == val )  return dr ;
        if ( v [ st ] == val )  return st ;
        return -1 ;
    }
    int mid = ( st + dr ) >> 1 ;
    if ( val >= v [ mid ] )   return bs0 ( mid , dr , val ) ;
    else                      return bs0 ( st , mid , val ) ;
}
ll bs1 ( ll st , ll dr , ll val )
{
    if ( st == dr || st + 1 == dr )
    {
          return st ;

    }
    int mid = ( st + dr ) >> 1 ;
    if ( val >= v [ mid ] )   return bs1 ( mid , dr , val ) ;
    else                      return bs1 ( st , mid , val ) ;
}
ll bs2 ( ll st , ll dr , ll val )
{
    if ( st == dr || st + 1 == dr )
    {
          return dr ;

    }
    int mid = ( st + dr ) >> 1 ;
    if ( val <= v [ mid ] )     return bs2 ( st , mid , val ) ;
    else                        return bs2 ( mid , dr , val ) ;

}



int main ( )    {

    ll n ;  f >> n ;
    for ( int i = 1 ; i <= n ; ++ i )   f >> v [ i ] ;

    ll m ;  f >> m ;
    for ( ; m ; m -- )
    {
        ll type , value ;   f >> type >> value ;
        if ( type == 0 )    g << bs0 ( 1 , n , value ) << "\n" ;
        if ( type == 1 )    g << bs1 ( 1 , n , value ) << "\n" ;
        if ( type == 2 )    g << bs2 ( 1 , n , value ) << "\n" ;
    }


    return 0 ;  }