Cod sursa(job #898849)

Utilizator ancutza96Anca Grigoriu ancutza96 Data 28 februarie 2013 11:57:59
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>

using namespace std;
int a[100001],n;
int cauta(int x)
{
    int mij, st, dr, p;
    p=-1;
    st=1; dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(a[mij]==x)
        {
            p=mij;
            st=mij+1;
        }
        else if(x<a[mij]) dr=mij-1;
        else st=mij+1;
    }
    return p;
}
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int caut1(int x)
{
    int mij, st,dr,p;
    p=-1;
    st=1; dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if (a[mij]<=x)
        {
            p=mij;
            st=mij+1;
        }
        else dr=mij-1;
    }
    return p;
}
int caut2(int x)
{
    int mij, st, dr, p;
    p=-1;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(a[mij]>=x)
        {
            p=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    return p;
}
int main()
{
    int i,x,m,t;
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>a[i];
    fin>>m;
    for(i=1; i<=m; i++)
    {
        fin>>t>>x;
        if(t==0)
            fout<<cauta(x)<<endl;
        else if(t==1)
            fout<<caut1(x)<<endl;
            else fout<<caut2(x)<<endl;
    }
    return 0;
}