Cod sursa(job #2252073)

Utilizator AlekapasOncea Alexandru Alekapas Data 2 octombrie 2018 11:59:07
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda musai_must Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int a[100001],n;
int cautare_binara1(int k)
{
    int sol=0;
    for(int i=30;i>=0;--i)
        if((1<<i)+sol<=n && a[(1<<i)+sol]<=k)
            sol=sol+(1<<i);
    if(a[sol]!=a[k])
        return -1;
    else
        return sol;
}

int cautare_binara2(int k)
{
    int sol=0;
    for(int i=30;i>=0;--i)
        if((1<<i)+sol<=n && a[(1<<i)+sol]<k)
            sol=sol+(1<<i);
        return sol+1;
}

int main()
{
    in>>n;
    for(int i=1;i<=n;++i)
        in>>a[i];
    int m;
    in>>m;
    for (int i=1;i<=m;++i){
        int c , x;
        in >> c >> x;
        if (! c)
            out<<cautare_binara1(x)<<"\n";
        else
            if (c==1)
                out<<cautare_binara1(x)<<"\n";
            else
                out<<cautare_binara2(x)<<"\n";
    }

    return 0;
}