Cod sursa(job #1772894)

Utilizator andysoloAndrei Solo andysolo Data 7 octombrie 2016 10:14:32
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

using namespace std;

ifstream a("cautbin.in");
ofstream b("cautbin.out");

int n,m,v[100001],p,x;

int cautbin0(int f,int l,int x)
{
    int m=(f+l)/2;
    if(f>l)return -1;
    else if(v[f]==x)
    return f;
    else if(v[m]>x)return cautbin0(f,m-1,x);
    else return cautbin0(m+1,l,x);
}

int cautbin1(int f,int l,int x)
{
    int m=(f+l)/2;
    if(f>=l)
    return f;
    else if(v[m]>=x)return cautbin1(f,m-1,x);
    else return cautbin1(m,l,x);
}


int cautbin2(int f,int l,int x)
{
    int m=(f+l)/2;
    if(f==l)
    return f;
    else if(v[m]<x)return cautbin2(m+1,l,x);
    else return cautbin2(f,m,x);
}

int main()
{
    a>>n;
    for(int i=1;i<=n;i++)
    a>>v[i];

    a>>m;
    for(int i=1;i<=m;i++)
    {
        a>>p>>x;
        int c=0;
        if(p==0)c=cautbin0(1,n,x);
        else if(p==1)c=cautbin1(1,n,x);
        else if(p==2)c=cautbin2(1,n,x);
        b<<p<<" "<<c<<endl;
    }

    return 0;
}