Cod sursa(job #1024235)

Utilizator morlockRadu Tatomir morlock Data 8 noiembrie 2013 14:28:01
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n, m, v[nmax], key;

void citeste()
{
    fin >> n;
    for ( int i=1; i<=n; ++i )
        fin >> v[i];
}

int func0()
{
    int step, i, x;
    fin >> x;

    for ( step = 1; step <= n; step <<= 1 );
    for ( i = 0; step; step >>= 1 )
        if ( i + step <= n && v[i+step] <= x )
            i += step;

    if ( v[i] == x ) return i;
        else return -1;

}

int func1()
{
    int step, i, x;
    fin >> x;

    for ( step = 1; step <= n; step <<= 1 );
    for ( i = 0; step; step >>= 1 )
        if ( i + step <= n && v[i+step] <= x )
            i += step;

    return i;
}

int func2()
{
    int step, i, x;
    fin >> x;

    for ( step = 1; step <= n; step <<= 1 );
    for ( i = n; step; step >>= 1 )
        if ( i - step > 0 && v[i-step] >= x )
            i -= step;

   return i;

}

int main()
{
    citeste();

   fin >> m;

    while ( m-- )
    {
        fin >> key;

        if ( key == 0 ) out << func0() << '\n';
        if ( key == 1 ) out << func1() << '\n';
        if ( key == 2 ) out << func2() << '\n';

    }

return 0;
}