Cod sursa(job #2035250)

Utilizator budurlean.andrei1Budurlean Andrei budurlean.andrei1 Data 9 octombrie 2017 09:34:32
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>

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

int a[100000], n, k, nrOp, val;

int BinarySearch0();
int BinarySearch1();
int BinarySearch2();

int main()
{
    fin >> n;
    for (int i = 1; i <= n; ++i)
        fin >> a[i];
    fin >> k;

    for (int i = 1; i <= k; ++i)
    {
        fin >> nrOp >> val;
        if (nrOp == 0)
            fout << BinarySearch0() << '\n';
        if (nrOp == 1)
            fout << BinarySearch1() << '\n';
        if (nrOp == 2)
            fout << BinarySearch2() << '\n';

    }
}

int BinarySearch0()
{
    int l = 1, r = n, m, poz = -1;
    while (l <= r)
    {
        m = (l + r) / 2;
        if (val <= a[m])
            l = m + 1;
        else
            r = m - 1;
        if (a[m] == val)
            poz = m;
    }
    return poz;
}

int BinarySearch1()
{
    int l = 1, r = n, m, poz;
    while (l <= r)
    {
        m = (l + r) / 2;
        if (a[m] <= val)
        {
            poz = m;
            l = m + 1;
        }
        else
            r = m - 1;
    }
    return poz;
}

int BinarySearch2()
{
    int l = 1, r = n, m, poz;
    while (l <= r)
    {
        m = (l + r) / 2;
        if (a[m] >= val)
        {
            poz = m;
            r = m - 1;
        }
        else
            l = m + 1;
    }
    return poz;
}