Cod sursa(job #1920710)

Utilizator hasmasandragosHasmasan Dragos hasmasandragos Data 10 martie 2017 09:28:22
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;

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

const int nmax=100005;
int a[nmax],n,m;

int bin_search (int val)
{
    int step=1,poz=0;
    while (step<n)
      step<<=1;

    while (step)
    {
        if (poz+step<=n)
        {
            if (a[poz+step]<=val)
                poz+=step;
        }
        step>>=1;
    }

    return poz;

}

int main()
{
    int op,valores,pozitie,i;
    /*
    0 x - cea mai din dreapta pozitie a lui x , -1 daca nu exista x
    1 x - cea mai din dreapta pozitie a lui x , garantata
    2 x - cea mai din stanga pozitie a lui x , garantata
    */

    f>>n;
    for (i=1;i<=n;i++)
        f>>a[i];
    f>>m;

    while (m--)
    {
        f>>op;
        f>>valores;

        if (op==0)
        {
            pozitie=bin_search(valores);
            if (a[pozitie]==valores)
                g<<pozitie<<'\n';
            else
                g<<"-1"<<'\n';
        }
        if (op==1)
        {
            pozitie=bin_search(valores);
            g<<pozitie<<'\n';
        }
        if (op==2)
        {
            pozitie=bin_search(valores-1);
            g<<pozitie+1<<'\n';
        }
    }

    return 0;
}