Cod sursa(job #2809670)

Utilizator IoanaDrandaIoana Dranda IoanaDranda Data 27 noiembrie 2021 12:49:37
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>

using namespace std;

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

int cautare0 (int n, int nr[], int x)
{
    int dr, st, mij, sol;
    dr = n;
    st = 1;
    mij = (dr + st) / 2;
    sol = -1;
    while (st <= dr)
    {
        if (x >= nr[mij])
        {
         if (nr[mij] == x)
         sol = mij;
         st = mij + 1;
        }

        else
            dr = mij - 1;
        mij = (st + dr) / 2;
    }

    return sol;
}

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

int cautare2 (int n, int nr[], int x)
{
    int dr, st, mij, sol;
    dr = n;
    st = 1;
    mij = (dr + st) / 2;
    while (st <= dr)
    {
        if (x > nr[mij])
        {
            st = mij + 1;
        }
        else
        {
            sol = mij;
            dr = mij - 1;
        }

        mij = (st + dr)/2;
    }
    return sol;
}


int n, nr[100001], m, tip, x, poz0;

int main()
{
    f >> n;
    for (int i = 1; i <= n; i ++)
    {
        f >> nr[i];
    }
    f >> m;
    for (int i = 1; i <= m; i ++)
    {
        f >> tip >> x;
        if (tip == 0)
            g << cautare0 (n, nr, x) << '\n';
        if (tip == 1)
            g << cautare1 (n, nr, x) << '\n';
        if (tip == 2)
            g << cautare2 (n, nr, x) <<'\n';

    }
    return 0;
}