Cod sursa(job #2809499)

Utilizator TheAlex1Florea Vasile Alexandru TheAlex1 Data 27 noiembrie 2021 09:57:34
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;
    dr = n;
    st = 1;
    mij = (dr + st) / 2;
    while (nr[mij] != x && st <= dr)
    {
        if (x > nr[mij])
            st = mij + 1;
        else dr = mij - 1;
        mij = (st + dr) / 2;
    }
    while (nr[mij] == nr[mij+1])
    {
        mij++;
    }
    if (st > dr) mij = -1;
    return mij;
}

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;
}