Cod sursa(job #804131)

Utilizator IoannaPandele Ioana Ioanna Data 28 octombrie 2012 21:57:08
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#define NMAX 100001

using namespace std;

long v[NMAX],n,m;

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

void scan()
{
    in>>n;
    for (int i=1;i<=n;i++)
        in>>v[i];
    in>>m;
}

int cautbin(long x)
{
    long st,dr,p=1,poz,sol;
    st=1;
    dr=n;
    for (p=1;p<=dr;p<<=1);
    p>>=1;
    poz=p;
    while (p)
    {
        for(;st+p>dr;p>>=1);
        poz=st+p;
        if (x<=v[poz])
        {
            p>>=1;
            continue;
        }
        st=poz;
    }
    return st+p;
}

int main()
{
    long x,poz,k;
    scan();
    for (int i=1;i<=m;i++)
    {
        in>>k>>x;
        poz=cautbin(x);
        if (k==0)
            if (v[poz]==x)
                out<<poz<<"\n";
            else out<<"-1\n";
        else
            if (k==1)
                out<<poz<<"\n";
            else
                {
                    int j;
                    for (j=poz;j>=1 && v[j]==x;j--);
                    out<<j+1<<"\n";
                }
    }
    return 0;
}