Cod sursa(job #2168189)

Utilizator betiuBetiu Alexandru betiu Data 14 martie 2018 09:58:42
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<iostream>
#include<fstream>
using namespace std;

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

unsigned a[100002],n,m,x,intr;

int cautarebinara(int x)
{
    int i,sol,l,r,m;
    l=1;
    r=n;
    sol=-1;
    while(l <= r )
    {
        m=(l+r)/2;
        if( x == a [m] )
            sol=m;
        if ( a[m] <= x )
            l=m+1;
        if( a[m] > x )
            r=m-1;

    }
    return sol;
}

int cautarebinara1(int x)
{
    int i,sol,l,r,m;
    l=1;
    r=n;
    sol=-1;
    m=a[1];
    while(l <= r )
    {
        m=(l+r)/2;
        if( x >= a [m] )
            sol=m;
        if ( a[m] <= x )
            l=m+1;
        if( a[m] > x )
            r=m-1;

    }
    return sol;
}

int cautarebinara2(int x)
{
    int i,sol,l,r,m;
    l=1;
    r=n;
    sol=-1;
    while(l <= r && sol==-1 )
    {
        m=(l+r)/2;
        if( x >= a [m] )
            sol=m;
        if ( a[m] <= x )
            l=m+1;
        if( a[m] > x )
            r=m-1;

    }
    return sol;
}

int main()
{
    int i;
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    f>>m;
    for(i=1;i<=m;i++)
    {
        f>>intr;
        f>>x;
        if(intr==0)
        {
            g<<cautarebinara(x)<<'\n';
        }
        if(intr==1)
            g<<cautarebinara1(x)<<'\n';
        if(intr==2)
            g<<cautarebinara2(x)<<'\n';
    }

}