Cod sursa(job #2705549)

Utilizator octavi26octavian octavi26 Data 12 februarie 2021 19:25:42
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.02 kb
#include <bits/stdc++.h>
#define N 100008

using namespace std;

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

int n;
int v[N];

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

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

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

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

void Rezolvare()
{
    int i, q;
    int cb;
    int k, x;
    fin >> k;
    for( i=1; i<=k; i++ )
    {
        fin >> q >> x;
        if( q == 0 )
        {
            cb = CautareBinara1( x );
            fout << cb << "\n";
        }
        else if( q == 1 )
        {
            cb = CautareBinara2( x );
            fout << cb << "\n";
        }
        else if( q == 2 )
        {
            cb = CautareBinara3( x );
            fout << cb << "\n";
        }
    }
}

int main()
{
    Citire();
    Rezolvare();
    fin.close();
    fout.close();
    return 0;
}