Cod sursa(job #2266272)

Utilizator Mihai21Mihai Stoica Mihai21 Data 22 octombrie 2018 15:37:34
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int i,n,x[100005],poz,o,k,v,e;

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

int cb0 (int st,int dr,int x[100],int v,int &e)
{
    int mij;

    if (st<=dr)
    {
        mij=(st+dr)/2;
        if (x[mij]==v)
        {
            e=mij;
            return cb0(mij+1,dr,x,v,e);
        }
        else return cb0(st,mij-1,x,v,e);
    }
    else return e;
}

int cb1 (int st,int dr,int x[100],int v, int &poz)
{
    int mij;
    if (st<=dr)
    {
        mij=(st+dr)/2;
        if (x[mij]<=v)
        {
            poz=mij;
            return cb1(mij+1,dr,x,v, poz);
        }
        else  return cb1(st,mij-1,x,v, poz);
    }
    else return poz;
}

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

int main()
{
    fin>>n;
    citire (1);
    fin>>o;
    e=-1;
    for (i=1; i<=o; i++)
    {
        fin>>k>>v;
        if (k==0) fout<<cb0(1,n,x,v,e)<<endl;
        if (k==1) fout<<cb1(1,n,x,v,poz)<<endl;
        if (k==2) fout<<cb2(1,n,x,v,poz);
    }
    return 0;
}