Cod sursa(job #2278938)

Utilizator alexnigaNiga Alexandru alexniga Data 8 noiembrie 2018 18:37:49
Problema Cautare binara Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.65 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int x[100001], ok;

int cautbin0(int st, int dr, int nr)
{
    if(st <= dr)
    {
        int mij = (st + dr) / 2;
        if (x[mij] == nr && x[mij + 1] != nr)
            {ok =1;
            return mij;
            }
        if(x[mij] > nr)
            return cautbin0(st, mij - 1, nr);
        else
            return cautbin0(mij + 1, dr, nr);
    }
}

int cautbin1(int st, int dr, int nr)
{
    if(st <= dr)
    {
        int mij = (st + dr) / 2;
        if (x[mij] <= nr && x[mij + 1] > nr)
            return mij;
        if (x[mij] > nr)
            return cautbin1(st, mij - 1, nr);
        else
            return cautbin1(mij + 1, dr, nr);
    }
}

int cautbin2(int st, int dr, int nr)
{
    if(st <= dr)
    {
        int mij = (st + dr) / 2;
        if (x[mij] >= nr && x[mij - 1] < nr)
            return mij;
        if(x[mij] >= nr)
            return cautbin2(st, mij - 1, nr);
        else
            return cautbin2(mij + 1, dr, nr);
    }
}

int main()
{ int n, i, k, cond, nr;

    f >> n;
    for (i = 1; i <= n; i++)
        f >> x[i];
    f >> k;
    for (i = 1; i <= k; i++)
    {
        f >> cond >> nr; ok = 0;
        if (cond == 0)
            {   int poz = cautbin0(1, n, nr);
                if(ok == 0)
                g << -1 << "\n";
            else
                g << poz << "\n";
            }
        if(cond == 1)
            g << cautbin1(1, n, nr) << "\n";
        if(cond == 2)
            g << cautbin2(1, n, nr) << "\n";
    }
    return 0;
}