Cod sursa(job #1965318)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 14 aprilie 2017 11:59:35
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
using namespace std;
ofstream fout ("cautbin.out");
ifstream fin ("cautbin.in");
int cautbin1( int x );
int cautbin2( int x );
int cautbin3( int x );
int n,a,b,t,i;
int v[100005];
int main()
{
    fin>>n;
    for( i = 1 ; i <= n ; i++ )
        fin>>v[ i ];
    fin>>t;
    while( t-- )
    {
        fin>>a>>b;
        switch( a )
        {
            case 0 : fout<<cautbin1( b ) ; break ;
            case 1 : fout<<cautbin2( b ) ; break ;
            case 2 : fout<<cautbin3( b ) ; break ;
        }
        fout<<'\n';
    }
}
int cautbin1( int x )
{
    int cs = 1;
    int cd = n;
    int rsp = -1;
    while( cs <= cd )
    {
        int mij = ( cs + cd ) >> 1;
        if( v[ mij ] == x )
        {
            rsp = mij;
            cs = mij + 1;
        }
        else
            cd = mij - 1;
    }
    return rsp;
}
int cautbin2( int x )
{
    int cs = 1;
    int cd = n;
    int rsp = -1;
    while( cs <= cd )
    {
        int mij = ( cs + cd ) >> 1;
        if( v[ mij ] <= x )
        {
            rsp = mij;
            cs = mij + 1;
        }
        else
            cd = mij - 1;
    }
    return rsp;
}
int cautbin3( int x )
{
    int cs = 1;
    int cd = n;
    int rsp = -1;
    while( cs <= cd )
    {
        int mij = ( cs + cd ) >> 1;
        if( v[ mij ] >= x )
        {
            rsp = mij;
            cd = mij - 1;
        }
        else
            cs = mij + 1;
    }
    return rsp;
}