Cod sursa(job #1129790)

Utilizator EuBossuletMuntea Andrei EuBossulet Data 28 februarie 2014 09:24:32
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
using namespace std;

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

int n,i,x,y,m, a[100002];

int bs0(int ls, int ld, int x)
{
    int m;
    if ((a[ls]>x)|| (a[ld]<x)) { return -1;}

    while (ls<=ld)
        {
            m=(ls+ld)/2;
            if (a[m]==x)
            {
                while (a[m+1]==x){m++;}
                return m;
            }
            else if (a[m]>x){ld=m-1;}
            else if (a[m]<x){ls=m+1;}

        }

    return -1;
}
int bs1(int ls, int ld, int x)
{
    int m;
    while (ls<=ld)
    {
        m=(ls+ld)/2;
        if (a[m]==x)
        {
            while (a[m+1]==x){m++;}
            return m;
        }
        else if (a[m]>x){ld=m-1;}
        else if (a[m]<x){ls=m+1;}
    }
    return ls;

}
int bs2(int ls, int ld, int x)
{
    int m;
    while (ls<=ld)
        {
            m=(ls+ld)/2;
            if (a[m]==x)
            {
                while (a[m-1]==x){m--;}
                return m;
            }
            else if (a[m]<x){ls=m+1;}
            else if (a[m]>x){ld=m-1;}
        }
        return ls;
}


int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
    }
    f>>m;
    for (i=1;i<=m;i++)
    {
        f>>y>>x;
        if (y==0){q<<bs0(1,n,x)<<'\n';}
        else if (y==1){q<<bs1(1,n,x)<<'\n';}
        else if (y==2){q<<bs2(1,n,x)<<'\n';}
    }
    f.close();
    q.close();


}