Cod sursa(job #1709536)

Utilizator mariateguianiMaria Teguiani mariateguiani Data 28 mai 2016 12:46:06
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m, v[100001],L=16;

void cautare0(int x)
{
    int pas=1<<L;
    int i=0;
    while(pas!=0)
    {
        if(i+pas <= n && v[i+pas] <= x)
            i+=pas;
        pas/=2;
    }
    if (v[i] == x) fout<<i<<"\n";
    else fout<<"-1\n";
}

void cautare1(int x)
{
    int pas=1<<L;
    int i=0;
    while(pas!=0)
    {
        if(i+pas <= n && v[i+pas] <= x)
            i+=pas;
        pas/=2;
    }
    fout<<i<<"\n";
}

void cautare2(int x)
{
    int pas=1<<L;
    int i=0;
    while(pas!=0)
    {
        if(i+pas <= n && v[i+pas] < x)
            i+=pas;
        pas/=2;
    }
    fout<<i+1<<"\n";
}

int main()
{
    int i,nr,x;
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>v[i];
    fin>>m;
    for(i=1; i<=m; i++)
    {
        fin>>nr>>x;
        if(nr==0)
            cautare0(x);
        if(nr==1)
            cautare1(x);
        if(nr==2)
            cautare2(x);
    }

    return 0;
}