Cod sursa(job #583190)

Utilizator stef93Stefan Gilca stef93 Data 18 aprilie 2011 19:26:46
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <iostream>
using namespace std;

int s[100003];
int n,m;

int main()
{
    int i;
    ifstream in("cautbin.in");
    in>>n;
    for(i=0;i<n;i++)
    in>>s[i];

    int step;
    for(step=1;step<n;step<<=1);
    ofstream out("cautbin.out");
    in>>m;
    int op,x,Log;
    for(;m;--m)
    {
        in>>op>>x;
        if(op==1||op==0)
        {
            Log=step;
            for(i=0;Log;Log>>=1)
            if(i+Log<n&&s[i+Log]<=x)
                i+=Log;
                if(op==0&&s[i]==x)
            out<<i+1<<'\n';
            else if(op==0&&s[i]!=x)out<<'-1\n';
            if(op==1)out<<i+1<<'\n';
        }
        if(op==2)
        {
            Log=step;
            for(i=n-1;Log;Log>>=1)
            if(i-Log>=0&&s[i-Log]>=x)i-=Log;
            out<<i+1<<'\n';
        }
    }
    in.close();out.close();
    return 0;
}