Cod sursa(job #1185320)

Utilizator cristina_borzaCristina Borza cristina_borza Data 15 mai 2014 15:27:31
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,m,a[100001],ex,val,i,p;
int aflapoz1(int val);
int aflapoz2(int val);
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>ex>>val;
        if(ex==0)
        {
            p=aflapoz1(val);
            if(a[p]==val)
            {
                fout<<p<<'\n';
            }
            else
            {
                fout<<-1<<'\n';
            }
        }
        if(ex==1)
        {
            p=aflapoz1(val);
            fout<<p<<'\n';
        }
        if(ex==2)
        {
            p=aflapoz2(val);
            fout<<p<<'\n';
        }
    }
    return 0;
}

int aflapoz1(int val)
{
    int poz=0,pw=0;
    for(pw=0;(1<<pw)<=n;pw++);
    pw--;
    while(pw>=0)
    {
        if(poz+(1<<pw)<=n)
        {
            if(a[poz+(1<<pw)]<=val)
            {
                poz+=(1<<pw);
            }
        }
        pw--;
    }
    return poz;
}

int aflapoz2(int val)
{
    int poz=n+1,pw=0;
    for(pw=0;(1<<pw)<=n;pw++);
    pw--;
    while(pw>=0)
    {
        if(poz-(1<<pw)>=1)
        {
            if(a[poz-(1<<pw)]>=val)
            {
                poz-=(1<<pw);
            }
        }
        pw--;
    }
    return poz;
}