Cod sursa(job #2437750)

Utilizator popesculucaPopescu Luca popesculuca Data 10 iulie 2019 11:24:49
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>
using namespace std;
ifstream   in("cautbin.in");
ofstream out("cautbin.out");
int v[100001] , n ;

void caut0(int nr)
{
    int l , r , mid , ans=0;
    l=1;
    r=n;
    while (l<=r)
    {

        mid=l+(r-l)/2;
        if (v[mid]==nr && mid>ans)
            ans=mid;
        if ( v[mid]>nr )
        {
            r=mid-1;
        }
        else
                l=mid+1;
    }
    if (v[ans]==nr)
    out<<ans<<'\n';
    else
        out<<-1<<'\n';

}

void caut1(int nr)
{

    int l , r , mid , ans=0;
    l=1;
    r=n;
    while (l<=r)
    {

        mid=l+(r-l)/2;
        if (v[mid]<=nr && mid>ans)
            ans=mid;
        if ( v[mid]>nr )
        {
            r=mid-1;
        }
        else
                l=mid+1;
    }
    out<<ans<<'\n';

}

void caut2 (int nr)
{

    int l , r , mid , ans=9999;
    l=1;
    r=n;
    while (l<=r)
    {

        mid=l+(r-l)/2;
        if (v[mid]>=nr && mid<=ans)
            ans=mid;
        if ( v[mid]>=nr )
        {
            r=mid-1;
        }
        else
                l=mid+1;
    }
    out<<ans<<'\n';
}



int main()
{
    int i , m , a , b;
    in>>n;
    for (i=1 ; i<=n ; i++)
        in>>v[i];
    in>>m;
    for (i=1 ; i<=m ; i++)
    {
        in>>a>>b;
        if (a==0)
            caut0(b);
            if(a==1)
                caut1(b);
        else
            if (a==2)
            caut2(b);

    }

return 0;

}