Cod sursa(job #2252093)

Utilizator AlekapasOncea Alexandru Alekapas Data 2 octombrie 2018 12:11:42
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda musai_must Marime 1.1 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]<k)
        return -1;
    else
        return sol;
}

int cautare_binara3(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;
}

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 1+sol;
}

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_binara3(x)<<"\n";
            else
                out<<cautare_binara2(x)<<"\n";
    }

    return 0;
}