Cod sursa(job #2623726)

Utilizator andreizZenoveiov Andrei andreiz Data 3 iunie 2020 17:17:54
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

#include <algorithm>



using namespace std;

ifstream f("cautbin.in");

ofstream g("cautbin.out");

int n,a[100002],tip,x,q;

int cautare_binara(int val,int step)

{

    int poz=0;

    for(;step;step>>=1)

    {

        if(step+poz<=n && a[poz+step]<=val)

        {

            poz+=step;

        }

    }

    return poz;

}

int main()

{

    f>>n;

    for(int i=1;i<=n;i++)

    {

        f>>a[i];

    }

    //sort(a+1,a+n+1);

    f>>q;

    int step=1;

    while(step<n)step<<=1;

    for(int i=1;i<=q;i++)

    {

        f>>tip>>x;

        if(tip==0)

        {

            if(a[cautare_binara(x,step)]==x)g<<cautare_binara(x,step)<<'\n';

            else g<<"-1"<<'\n';

        }

        else if(tip==1)

        {

            g<<cautare_binara(x,step)<<'\n';

        }

        else

        {

            int poz1=cautare_binara(x-1,step)+1;

            int poz2=cautare_binara(x,step)+1;

            if(a[poz1]==x)g<<poz1<<'\n';

            else g<<poz2<<'\n';

        }

    }

    return 0;

}