Cod sursa(job #1428029)

Utilizator razvan242Zoltan Razvan-Daniel razvan242 Data 3 mai 2015 15:47:21
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>

using namespace std;

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

int n, A[100001], queries, tip, val;

int Binara(int val, int tip);

int main()
{
    fin >> n;
    for( int i = 1; i <= n; ++i )
        fin >> A[i];
    fin >> queries;
    for( ; queries; --queries )
    {
        fin >> tip >> val;
        fout << Binara(val, tip) << '\n';
    }
    return 0;
}

int Binara(int val, int tip)
{
    int step, ans;
    for( step = 1; step < n; step <<= 1 );
    if( tip != 2 )
    {
        for( ans = 1; step; step >>= 1 )
            if( ans + step <= n && A[ans + step] <= val )
                ans += step;
        if( !tip && A[ans] != val )
            return -1;
        return ans;
    }
    else
    {
        for( ans = n; step; step >>= 1 )
            if( ans - step >= 1 && A[ans - step] >= val )
                ans -= step;
        return ans;
    }
}