Cod sursa(job #2573735)

Utilizator PredescuSebastianIonPredescu Sebastian Ion PredescuSebastianIon Data 5 martie 2020 18:55:37
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 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;
}