Cod sursa(job #1960371)

Utilizator mihneaserbanmihnea serban mihneaserban Data 10 aprilie 2017 13:14:15
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[100001];
int n;

int zero(int x)
{
    int r=0;
    int pas=1<<16;
    while(pas!=0)
    {
        if(r+pas<=n && v[r+pas]<=x)
            r += pas;
        pas /= 2;
    }
    if(v[r]!=x)
        return -1;
    return r;

}

int unu(int x)
{
    int r=0;
    int pas=1<<16;
    while(pas!=0)
    {
        if(r+pas<=n&&v[r+pas]<=x)
            r+=pas;
        pas/=2;
    }
    return r;
}

int doi(int x)
{
    int r=0;
    int pas=1<<16;
    while(pas!=0)
    {
        if(r+pas<=n&&v[r+pas]<x)
            r+=pas;
        pas/=2;
    }
    return r+1;
}

int main()
{

    int i, w, x,m;
    in>>n;
    for( i=1; i<=n; i++)
        in>>v[i];
    in>>m;
    while( m)
    {
        in>>w>>x;
        if( w==0)
            out<<zero( x)<<'\n';
        if( w==1)
            out<<unu( x)<<'\n';
        if( w==2)
            out<<doi( x)<<'\n';
        m--;
    }
    return 0;
}