Cod sursa(job #1248425)

Utilizator IliescuDanAndreiIliescu Dan Andrei IliescuDanAndrei Data 25 octombrie 2014 09:54:28
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>

using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");

int n, v[100001];

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

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

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

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