Cod sursa(job #2072230)

Utilizator fanezisfortunaionescu stefan fanezisfortuna Data 21 noiembrie 2017 16:33:46
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n;
int v[100001];

const int l=16;

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

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

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

int main()
{
    int m,a,b;
    in>>n;
    for(int i=1; i<=n; i++)
        in>>v[i];
    in>>m;

    for(int i=1; i<=m; i++)
    {
        in>>a>>b;
        if(a==0)
            out<<f0(b);
        else if(a==1)
            out<<f1(b);
        else if(a==2)
            out<<f2(b);
        out<<"\n";
    }
    return 0;
}