Cod sursa(job #639621)

Utilizator thea35Mihai Ana thea35 Data 23 noiembrie 2011 18:01:06
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>

using namespace std;

int v[100001], n;

int cautare0 (int x)
{
    int i, pas=1<<16;
    for(i=0; pas!=0; pas/=2)
        if(i+pas<=n&&v[i+pas]==x)
            i+=pas;
    if(v[i]==x)
        return i;
    return -1;
}

int cautare1 (int x)
{
    int i, pas=1<<16;
    for(i=0; pas!=0; pas/=2)
    {
        if(i+pas<=n&&v[i+pas]<=x)
            i+=pas;
    }
    return i;
}

int cautare2 (int x)
{
    int i, pas=1<<16;
    for(i=0; pas!=0; pas/=2)
    {
        if(i+pas<=n&&v[i+pas]<x)
            i+=pas;
    }
    return i+1;
}
int main()
{
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    int M, i, nr, x, y;
    in>>n;
    for(i=1; i<=n; i++)
        in>>v[i];
    in>>M;
    for(i=1; i<=M; i++)
    {
        in>>nr;
        in>>x;
        if(nr==0)
        {
            y=cautare0(x);
            out<<y<<"\n";
        }
        if(nr==1)
        {
            y=cautare1(x);
            out<<y<<"\n";
        }
        if(nr==2)
        {
            y=cautare2(x);
            out<<y<<"\n";
        }
    }

    return 0;
}