Cod sursa(job #2630004)

Utilizator andreimocianAndrei Mocian andreimocian Data 23 iunie 2020 17:12:15
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <fstream>

using namespace std;

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

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

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

void Cautare0(int z)
{
    int st = 1, dr = n, mij, poz = -1;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(a[mij] > z)
        {
            dr = mij - 1;
        }
        if(a[mij] < z)
        {
            st = mij + 1;
        }
        if(a[mij] == z)
        {
            poz = mij;
            st = mij + 1;
        }
    }
    fout << poz << "\n";
}

void Cautare1(int z)
{
    int st = 1, dr = n, mij, poz = 0;
    {
        while(st <= dr)
        {
            mij = (st + dr) / 2;
            if(a[mij] > z)
            {
                dr = mij - 1;
            }
            if(a[mij] <= z)
            {
                poz = mij;
                st = mij + 1;
            }
        }
    }
    fout << poz << "\n";
}

void Cautare2(int z)
{
    int st = 1, dr = n, mij, poz = -1;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(a[mij] > z)
        {
            dr = mij - 1;
        }
        if(a[mij] < z)
        {
            st = mij + 1;
        }
        if(a[mij] == z)
        {
            poz = mij;
            dr = mij - 1;
        }
    }
    fout << poz << "\n";
}

int main()
{
    citire();
    fin >> m;
    for(int i = 1; i <= m; i++)
    {
        fin >> i >> x;
        if(i == 0)
        {
            Cautare0(x);
        }
        if(i == 1)
        {
            Cautare1(x);
        }
        if(i == 2)
        {
            Cautare2(x);
        }
    }
    return 0;
}