Cod sursa(job #2035277)

Utilizator B_TudorBoanca Tudor B_Tudor Data 9 octombrie 2017 10:13:44
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>

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

void read();

int cautare1(int l, int r, int v);

int cautare2(int l ,int r, int v);

int cautare3(int l, int r, int v);

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

int main()
{
    read();
    while(m--)
    {
        fin >> nrOp >> val;
        if (nrOp == 0)
        {
            fout << cautare1(1, n, val) << '\n';
        }
        if (nrOp == 1)
        {
            fout << cautare2(1, n, val) << '\n';
        }
        if (nrOp == 2)
        {
            fout << cautare3(1, n, val) << '\n';
        }
    }
}

void read()
{
    fin >> n;
    for(int i {1}; i <= n; ++i)
    {
        fin >> a[i];
    }

    fin >> m;
}

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

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

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