Cod sursa(job #1193186)

Utilizator cristinamateiCristina Matei cristinamatei Data 31 mai 2014 11:02:53
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;

int a[100001], n, m;

int tip0(int x)
{
    int i = 0, pas;
    pas = 1 << 16;
    while( pas != 0 )
    {
        if ( i + pas <= n && a[i + pas] == x )
            i+=pas;
        pas/=2;
    }
    if ( a[i] == x )
        return i;
    else return -1;
}

int tip1(int x)
{
    int i = 0, pas;
    pas = 1 << 16;
    while( pas != 0 )
    {
        if ( i + pas <= n && a[i + pas] <= x)
            i+=pas;
        pas/=2;
    }
    return i;
}

int tip2(int x)
{
    int i = 0, pas;
    pas = 1 << 16;
    while( pas != 0 )
    {
        if( i + pas <= n && a[i + pas] < x )
            i+=pas;
        pas/=2;
    }
    return 1+i;
}

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