Cod sursa(job #1772430)

Utilizator pionierul22aNa LiZa pionierul22 Data 6 octombrie 2016 19:06:36
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.7 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) {

    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 0;
}

int doi(int st,int dr,int k)
{
    int mijl;
    int e;
    while(st<dr)
    {
        mijl=(st+dr)/2;
        if(v[mijl]>=k)
            e=mijl;

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

    return e;
}
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)
           {
               w=unu(1,n,b);
               while(v[w]<=b)
               w++;
               fout<<w-1<<'\n';
           }
        if(a==2)
        {
             w=doi(1,n,b);
               while(v[w]>=b)
               w--;
               fout<<w+1<<'\n';
        }

    }
    return 0;
}