Cod sursa(job #1321037)

Utilizator blankBalmos Teodora blank Data 18 ianuarie 2015 18:55:38
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;

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

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

int q1(int val)
{
    int i=0,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;
}

int q2(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 q0(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;
    if(v[i]==val)
        return i;
    else
        return -1;

}

int main()
{
    fin>>n;

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

    fin>>m;

    while(fin>>x)
    {
        if(x==0)
        {
            fin>>val;
            fout<<q0(val)<<'\n';
        }
        if(x==1)
        {
            fin>>val;
            fout<<q1(val)<<'\n';
        }
        if(x==2)
        {
            fin>>val;
            fout<<q2(val)<<'\n';
        }

    }

    return 0;
}