Cod sursa(job #583195)

Utilizator stef93Stefan Gilca stef93 Data 18 aprilie 2011 19:43:14
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
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==0)
        {
            Log=step;
            i=0;
            for(;Log;Log>>=1)
            if(i+Log<n&&s[i+Log]<=x)
                i+=Log;
                if(x==s[i])
                out<<i+1<<'\n';
                else out<<"-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';
        }
            if(op==1)
        {
            Log=step;
            for(i=0;Log;Log>>=1)
            if(i+Log<n&&s[i+Log]<=x)
                i+=Log;
                out<<i+1<<'\n';
        }

    }
    in.close();out.close();
    return 0;
}