Cod sursa(job #1999112)

Utilizator zanugMatyas Gergely zanug Data 10 iulie 2017 12:46:56
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NLIM = 1e5+10;

int n, m;
int x[NLIM];

int bins0(int a, int l, int r)
{
    if(l == r && x[l] != a)
        return -2;

    if(l == r && x[l] == a)
    {
        return l;
    }

    int mid = (l + r) / 2 + 1;

    if(x[mid] > a)
        return bins0(a, l, mid - 1);
    else
        return bins0(a, mid, r);
}

int bins1(int a, int l, int r)
{
    if(l == r)
    {
        return l;
    }

    int mid = (l + r) / 2 + 1;

    if(x[mid] > a)
        return bins1(a, l, mid - 1);
    else
        return bins1(a, mid, r);
}

int bins2(int a, int l, int r)
{
    if(l == r)
    {
        return l;
    }

    int mid = (l + r) / 2;

    if(x[mid] < a)
        return bins2(a, mid + 1, r);
    else
        return bins2(a, l, mid);
}

int main()
{
    fin >> n;

    for(int i = 0; i < n; ++i)
        fin >> x[i];

    fin >> m;

    int v, a;
    while(m--)
    {
        fin >> v >> a;
        if(v == 0)
            fout << bins0(a, 0, n-1) + 1 << "\n";
        else if(v == 1)
            fout << bins1(a, 0, n-1) + 1 << "\n";
        else if(v == 2)
            fout << bins2(a, 0, n-1) + 1 << "\n";
    }

    return 0;
}