Cod sursa(job #2782811)

Utilizator LucaSimionovLuca Mihai Simionov LucaSimionov Data 13 octombrie 2021 09:48:17
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <fstream>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int n, x, a[100005], c, m;

int cautbinar_0 (int x)
{
    int st = 1, dr = n, poz = -1;

    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        if (x < a[mij])
            dr = mij - 1;
        else
        {
            if (x == a[mij])
                poz = mij;
            st = mij + 1;
        }
    }
    return poz;
}

int cautbinar_1 (int x)
{
    int st = 1;
    int dr = n;
    int poz = -1;

    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        if (a [mij] <= x)
        {
            poz = mij;
            st = mij + 1;
        }
        else
            dr = mij - 1;
    }
    if (a[poz] <= x)
        return poz;
}

int cautbinar_2 (int x)
{
    int st = 1, dr = n, poz = 0;
    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        if (a[mij] >= x)
        {
            poz = mij;
            dr = mij - 1;
        }
        else st = mij + 1;
    }
    return poz;
}

int main()
{
    f >> n;

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

    f >> m;

    for (int i = 1; i <= m; i ++ )
    {
        f >> c;
        f >> x;
        switch (c)
        {
        case 0:
            g << cautbinar_0(x);
            g << '\n';
            break;
        case 1:
            g << cautbinar_1(x);
            g << '\n';
            break;
        case 2:
            g << cautbinar_2(x);
            g << '\n';
            break;
        }
    }
    return 0;
}