Cod sursa(job #1320974)

Utilizator blankBalmos Teodora blank Data 18 ianuarie 2015 18:20:34
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int v[100010],i,n,m,x,a,val;

int cbinu(int val)
{
    int i=-1,step;

    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
        if(i+step<n && v[i+step]<=val)
            i+=step;
    return i+1;
}

int cbinl(int val)
{
    int i=-1,step;

    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
        if(i+step<n && v[i+step]<val)
            i+=step;
    return i+2;
}

int q1(int val)
{
    int i,step;

    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
        if(i+step<n && v[i+step]<val)
            i+=step;
    return i+1;
}

int main()
{
    fin>>n;

    for(i=0;i<n;i++)
        fin>>v[i];

    fin>>m;

    while(fin>>x)
    {
        if(x==0)
        {
            fin>>val;
            a=cbinu(val);
            fout<<a<<'\n';
        }
        if(x==1)
        {
            if(a!=-1)
                fout<<a<<'\n';
            else
                fout<<q1(val)<<'\n';

        }
        if(x==2)
        {
            fin>>val;
            fout<<cbinl(val);
        }

    }

    return 0;
}