Cod sursa(job #2205391)

Utilizator BatedCrayonBratosin David - Robert BatedCrayon Data 18 mai 2018 23:36:45
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>
#define MAXE 100001

using namespace std;

int v[MAXE];
int i,j,N,M,T;
char op;

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

int CautareElement(int x)
{
    int s,d,m,p;
    s=1;
    d=N;
    p=-1;
    while(s<=d)
    {
        m=s+(d-s)/2;
        if(x==v[m])
        {
            p=m;
            s=m+1;
        }
        else
        {
            if(x<v[m])
                d=m-1;
            else
                s=m+1;
        }
    }
    return p;
}

int CautareStanga(int x)
{
    int s,d,m,p;
    s=1;
    d=N;
    p=-1;
    while(s<=d)
    {
        m=s+(d-s)/2;
        if(x<=v[m]) //inseamna ca se afla in stanga
        {
            p=m;
            d=m-1;
        }
        else
            s=m+1;

    }
    return p;
}

int CautareDreapta(int x)
{
    int s,d,m,p;
    s=1;
    d=N;
    p=-1;
    while(s<=d)
    {
        m=s+(d-s)/2;
        if(v[m]<=x)
        {
            p=m;
            s=m+1;
        }
        else
            d=m-1;
    }
    return p;
}

int main()
{
    in>>N;
    for(i=1; i<=N; i++)
        in>>v[i];
    in>>M;
    for(i=1; i<=M; i++)
    {
        in>>op;
        if(op=='0')
        {
            in>>T;
            out<<CautareElement(T)<<'\n';
        }
        else
        {
            if(op=='1')
            {
                in>>T;
                out<<CautareDreapta(T)<<'\n';
            }
            else
            {
                in>>T;
                out<<CautareStanga(T)<<'\n';
            }
        }

    }
    return 0;
}