Cod sursa(job #1193166)

Utilizator cristinamateiCristina Matei cristinamatei Data 31 mai 2014 09:58:41
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>

using namespace std;

struct intrebare
{
    int tip, nr;
};
intrebare b[100000];
int a[100000], n, m;

int tip0(int x)
{
    int ld = n, ls = 1, mij = 0;
    while( ls <= ld )
    {
        mij = ( ls + ld )/2;
        if ( a[mij] == x )
            break;
        if ( a[mij] < x )
            ls = mij + 1;
        else
            ld = mij - 1;
    }
    while ( a[mij + 1] == a[mij] )
        mij++;
    if ( mij == 0 )
        return -1;
    else return mij;
}

int tip1(int x)
{
    int ld = n, ls = 1, mij = 0, poz;
    while( ls <= ld )
    {
        mij = ( ls + ld )/2;
        if ( a[mij] <= x )
        {
            poz = mij;
            ls = mij + 1;
        }
        else ld = mij - 1;
    }
    return poz;
}

int tip2(int x)
{
    int ld = n, ls = 1, mij = 0, poz;
    while( ls <= ld )
    {
        mij = ( ls + ld )/2;
        if ( a[mij] < x )
            ls = mij + 1;
        else
        {
            poz = mij;
            ld = mij - 1;
        }
    }
    return poz;
}


int main()
{
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    int i,poz;
    in >> n;
    for( i = 1; i <= n; i++ )
        in >> a[i];
    in >> m;
    for ( i = 1; i <= m; i++ )
        in >> b[i].tip >> b[i].nr;
    for ( i = 1; i <= m; i++ )
    {
        if ( b[i].tip == 0 )
        {
            poz = tip0(b[i].nr);
            out << poz << endl;
            continue;
        }
        if ( b[i].tip == 1 )
        {
            poz = tip1(b[i].nr);
            out << poz<<endl;
            continue;
        }
        poz = tip2(b[i].nr);
        out << poz<< endl;
    }
    return 0;
}