Cod sursa(job #784523)

Utilizator TheNechizFMI Razvan Birisan TheNechiz Data 6 septembrie 2012 11:10:09
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
# include <fstream>
# define dim 100005

using namespace std;

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

int v[dim],n,m,x,y,mij,li,ls,p;

int caut_0( int h ){

    li = 1;
    ls = n;
    p = 0;

    while( li <= ls ){

        mij = (li + ls) / 2;

        if( v[mij] == h && p < mij ) p = mij;
        if( v[mij] <= h )
            li = mij + 1;
            else
                ls = mij - 1;
    }

    if( p )
        return p;
    else
        return -1;
}
int caut_1( int h ){

    li = 1;
    ls = n;
    p = 0;

    while( li <= ls ){

        mij = (li + ls) / 2;

        if( v[mij] <= h && p < mij ) p = mij;
        if( v[mij] <= h )
            li = mij + 1;
            else
                ls = mij - 1;
    }

    return p;
}
int caut_2( int h ){

    li = 1;
    ls = n;
    p = dim;

    while( li <= ls ){

        mij = (li+ls)/2;

        if( v[mij] >= h && p > mij ) p = mij;
        if( v[mij] < h )
            li = mij + 1;
            else
                ls = mij - 1;
    }

    return p;
}
int main(){

    int i;

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

    f >> m;
    for( i = 1 ; i <= m ; ++i ){
        f >> x >> y;
        switch (x) {

            case 0 : g << caut_0(y) << '\n';
                    break;
            case 1 : g << caut_1(y) << '\n';
                    break;
            case 2 : g << caut_2(y) << '\n';
        }
    }

    f.close();
    g.close();

    return 0;
}