Cod sursa(job #2037311)

Utilizator dan.cantorCantor Dan Alexandru dan.cantor Data 11 octombrie 2017 23:31:20
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>

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

int cautare_binara(int a[100001], int n, int y);

int main()
{
    int n, m, a[100001], x, y, pozitie{-1};
    fin >> n;
    for (int i = 1; i <= n; ++i)
        fin >> a[i];
    fin >> m;
    for (int i = 1; i <= m; ++i)
    {
        fin >> x >> y;
        if (x == 0)
        {
            pozitie = cautare_binara(a, n, y);
            if (a[pozitie] != y)
                fout << -1 << '\n';
            else
            {
                while (a[pozitie] == a[pozitie + 1])
                    pozitie++;
                fout << pozitie << '\n';
            }
        }
        if (x == 1)
        {
            pozitie = cautare_binara(a, n, y);
            while (a[pozitie] == a[pozitie + 1])
                pozitie++;
            fout << pozitie << '\n';
        }
        if (x == 2)
        {
            pozitie = cautare_binara(a, n, y);
            while (a[pozitie] == a[pozitie - 1])
                pozitie--;
            fout << pozitie << '\n';
        }
    }
}

int cautare_binara(int a[100001], int n, int y)
{
    int right = 1, left = n, middle;
    while (right <= left)
    {
        middle = left + (right - left) / 2;
        if (a[middle] == y)
            return middle;
        if (a[middle] > y)
            left = middle - 1;
        else
            right = middle + 1;
    }
    return middle;
}