Cod sursa(job #2278119)

Utilizator Dragomiralexandru621@yahoo.comDragomir ionut alexandru [email protected] Data 7 noiembrie 2018 12:11:06
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in") ;
ofstream g("cautbin.out") ;
int n , m , a[100002] , x , ok ;

void binar( int st , int dr )
{   if( st <= dr ){
    int poz = ( st + dr ) / 2 ;
    if( a[poz] == x && a[poz+1] != x ){
    g << poz << " \n" ;
    ok = 0 ;
    }
    else
        if( a[poz] <= x )
        binar( poz + 1 , dr ) ;
        else
            binar( st , poz - 1 ) ;
}
}

void binar1( int st , int dr )
{   if( st <= dr ){
    int poz = ( st + dr ) / 2 ;
    if( a[poz] <= x && a[poz+1] > x ){
    g << poz << " \n" ;
    }
    else
        if( a[poz] <= x )
        binar( poz + 1 , dr ) ;
        else
            binar( st , poz - 1 ) ;
}
}

void binar2( int st , int dr )
{   if( st <= dr ){
    int poz = ( st + dr ) / 2 ;
    if( a[poz] >= x && a[poz-1] < x ){
    g << poz << " \n" ;
    }
    else
        if( a[poz] <= x )
        binar( poz + 1 , dr ) ;
        else
            binar( st , poz - 1 ) ;
}
}
int main()
{
f >> n ;
for( int i = 1 ; i <= n ; i ++ )
    f >> a[i] ;
f >> m ;
for( int i = 1 ; i <= m ; i ++ )
{  int operatie ;
    f >> operatie >> x ;
    ok = 1 ;
    if( operatie == 0 ){
        binar( 1 , n ) ;
        if( ok )
            g << "-1\n" ;
    }
    if( operatie == 1 )
        binar1( 1 , n ) ;
    if( operatie == 2 )
        binar2( 1 , n ) ;
}
}