Cod sursa(job #2150682)

Utilizator Marc_GrecMarc Grec Marc_Grec Data 3 martie 2018 18:30:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>

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

int n, a[100001];
int Q, x, p, q;

bool ok;

void A0();
void A1();
void A2();

int main()
{

    fin >> n;

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

    fin >> Q;

    while (Q--)
    {
        fin >> x;

        if (x == 0)
            A0();

        if (x == 1)
            A1();

        if (x == 2)
            A2();
    }

    fin.close();
    fout.close();

    return 0;
}


void A0()
{
    ok = true;

    p = -1;

    fin >> q;

    int st = 1, dr = n, mij;

    while (st <= dr)
    {
        mij = (st + dr) / 2;

        if (a[mij] == q)
            p = mij;

        if (a[mij] > q)
            dr = mij - 1;

        if (a[mij] <= q)
            st = mij + 1;
    }

    fout << p << '\n';
}

void A1()
{
    int st = 1, dr = n, mij;

    fin >> q;

    while (st <= dr)
    {
        mij = (st + dr) / 2;

        if (a[mij] <= q)
        {
            p = mij;
            st = mij + 1;
        }

        if (a[mij] > q)
            dr = mij - 1;

    }

    fout << p << '\n';
}

void A2()
{
    int st = 1, dr = n, mij;

    fin >> q;

    while (st <= dr)
    {
        mij = (st + dr) / 2;

        if (a[mij] >= q)
        {
            p = mij;
            dr = mij - 1;
        }

        if (a[mij] < q)
            st = mij + 1;
    }

    fout << p << '\n';
}