Cod sursa(job #656955)

Utilizator IoanaMarMarussi Ioana IoanaMar Data 5 ianuarie 2012 15:57:15
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <cstdio>
using namespace std;

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

int a[100005],m,n,x,y;

int caz0(int b)
{
    int st=1,dr=n,mij,fin=-1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if (a[mij]==b)
        {
            fin=mij;
            st=mij+1;
        }
        if(a[mij]<b)
            st=mij+1;
        if (a[mij]>b)
            dr=mij-1;
    }
        return fin;
}

int caz1(int b)
{
    int st=1, dr=n, mij, fin;
    while( st<=dr)
    {
        mij=(st+dr)/2;
        if (a[mij]<=b)
        {
            fin=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }
    return fin;
}

int caz2(int b)
{
    int st=1,dr=n,mij,fin;
    while(st<=dr)
    {
    mij=(st+dr)/2;
    if (a[mij]>=b)
    {
        fin=mij;
        dr=mij-1;
    }
    else
    st=mij+1;
    }
    return fin;
}
int main()
{
    int i;
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    f>>m;
        for(i=1;i<=m;i++)
        {
            f>>x>>y;
            if(x==0) g<<caz0(y)<<"\n";
            if(x==1) g<<caz1(y)<<"\n";
            if (x==2) g<<caz2(y)<<"\n";
        }
    return 0;
}