Cod sursa(job #2002399)

Utilizator Neamtu_StefanStefan Neamtu Neamtu_Stefan Data 19 iulie 2017 18:12:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;

ifstream cin("cautbin.in");
ofstream cout("cautbin.out");

int v[100002],n;

void b0(int x, int lo, int hi)
{
    int mi,sol=-1;

    while (lo <= hi)
    {
        mi=lo+(hi-lo)/2;
        if (v[mi]>x)
            hi=mi-1;
        else
        {
            sol=mi;
            lo=mi+1;
        }
    }

    if (v[sol]!=x)
        cout << "-1\n";
    else cout << sol << "\n";
}

void b1(int x, int lo, int hi)
{
    int mi;

    while (lo<hi)
    {
        mi=lo+(hi-lo+1)/2;
        if (v[mi]>x)
            hi=mi-1;
        else
            lo=mi;
    }
    cout << lo << "\n";
}

void b2(int x, int lo, int hi)
{
    int mi;

    while (lo<hi)
    {
        mi=lo+(hi-lo)/2;
        if (v[mi]<x)
            lo=mi+1;
        else
            hi=mi;
    }
    cout << hi << "\n";
}

int main()
{
    cin >> n;
    for (int i=1;i<=n;i++)
        cin >> v[i];

    int q;
    cin >> q;

    int tip,nr;
    for(;q;--q)
    {
        cin >> tip >> nr;
        switch(tip)
        {
            case 0: {b0(nr,1,n);break;}
            case 1: {b1(nr,1,n);break;}
            case 2: {b2(nr,1,n);break;}
        }
    }

    return 0;
}