Cod sursa(job #1330995)

Utilizator felixiPuscasu Felix felixi Data 31 ianuarie 2015 10:54:19
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>

using namespace std;

int N, A[100010], j, M, Q, y, Nr,k ,ok;

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

int bsu(int val)
{
    int i, step;
    for (step = 1; step < N; step <<= 1);
        for (i = 0; step; step >>= 1)
            if (i + step <= N && A[i + step] <= val)
               i += step;
    return i;
}
int bsl(int val)
{
    int i, step;
    for (step = 1; step < N; step <<= 1);
        for (i = 0; step; step >>= 1)
            if (i + step <= N && A[i + step] < val)
               i += step;
    return i+1;
}

int main()
{
    in >> N;
    for( j = 1; j <= N; j++ )  in >> A[j];
    in >> M;
    for( j = 0;  j < M;  j++ )
    {
        in >> Q;
        in >> Nr;
        if( Q == 0 )
        {
            y = bsu( Nr );
            if( A[y] == Nr )
                out << y << '\n';
            else
                out << -1 << '\n';
        }
        if( Q == 1 )
        {
            out << bsl( Nr+1 ) - 1 <<'\n';
        }
        ok = 0;
        if( Q == 2 )
        {
            out << bsu( Nr-1 ) + 1 <<'\n';
        }

    }
    return 0;
}