Cod sursa(job #1772495)

Utilizator pionierul22aNa LiZa pionierul22 Data 6 octombrie 2016 19:43:28
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int i,j,n,v[1000],a,b,m;
int zero(int st, int dr, int k)
{
    int mijl;
    while(st<dr)
    {
        mijl=(st+dr)/2;
        if(v[mijl]==k)
            return mijl;

        if(k>v[mijl])
            st=mijl+1;
            else
            dr=mijl-1;
    }

    return -1;
}

int unu (int st, int dr, int k) {

    st=1;
    dr=n;
    int mijl;
    int y;
    while(st<=dr)
    {
        mijl=(st+dr)/2;
        if(v[mijl]<=k)
        {
            y=mijl;
            st=mijl+1;
        }
        else
            dr=mijl-1;
    }

    return y;
}

int doi(int st,int dr,int k)
{
    int mijl;
    int y;
    while(st<=dr)
    {
        mijl=(st+dr)/2;
        if(v[mijl]>=k)
        {
            y=mijl;
            dr=mijl-1;
        }
        else
            st=mijl+1;
    }
    return y;
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b;
        int w;
        if(a==0)
            {
                w=zero(1,n,b);
                 if(w!=-1)
                {
                    while(v[w]==b)
                    w++;
                    fout<<w-1<<'\n';
                }
                else
                    fout<<-1<<'\n';

            }

        if(a==1)
           fout<<unu(1,n,b)<<'\n';

        if(a==2)
        fout<<doi(1,n,b)<<'\n';

    }
    return 0;
}