Cod sursa(job #2209235)

Utilizator Turturica_DorinTurturica Dorin Turturica_Dorin Data 2 iunie 2018 14:18:58
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>

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

#define nMAX 100005

int n, T, v[ nMAX ], i, logn, log, tip, x;

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

    for ( logn = 1; logn <= n; logn <<= 1 );

    for ( ; T; T-- )
    {
        fin>>tip>>x;
        if ( tip <= 1 )
        {
            for ( i = 0, log = logn; log; log >>= 1 )
            {
                if ( i + log <= n && v[ i + log ] <= x )
                {
                    i += log;
                }
            }
            if ( tip == 0 && v[ i ] != x )
                fout<< -1 << '\n';
            else
                fout<< i << '\n';
        }
        else if ( tip == 2 )
        {
            for ( i = logn, log = logn >> 1 ; log ; log >>= 1 )
            {
                if ( v[ i - log ] >= x )
                    i -= log;
            }
            fout<< i << '\n';
        }
    }

    return 0;
}