Cod sursa(job #2153774)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 6 martie 2018 14:09:44
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>

using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int n,k,i,a[100002],m,cer,x,poz;
int cautbin1(int val)
{
    int step=1,i;
    while (step<n) step=step<<1;
    for (i=0;step>0;step>>=1)
    {
        if (i+step<=n && a[i+step]<=val) i+=step;
    }
    return i;
}
int cautbin2(int val)
{
    int st=1,dr=n,mij;
    while (st<=dr)
    {
        mij = st + (dr-st)/2;
        if (a[mij]>=val)
        {
            poz=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    return poz;
}
int main()
{
    f>>n;
    for (i=1;i<=n;i++) f>>a[i];
    f>>m;
    for (i=1;i<=m;i++)
    {
        f>>cer>>x;
        if (cer==0)
        {
            poz=cautbin1(x);
            if(a[poz]==x) g<<poz<<'\n';
            else g<<"-1"<<'\n';
        }
        else if (cer==1)
        {
            poz=cautbin1(x);
            g<<poz<<'\n';
        }
        else
        {
            poz=cautbin2(x);
            g<<poz<<'\n';
        }
    }
    return 0;
}