Cod sursa(job #1451795)

Utilizator PaulStighiStiegelbauer Paul-Alexandru PaulStighi Data 18 iunie 2015 15:29:09
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include<fstream>
#define NMax 100005
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int N,M,Value;
int V[NMax];

int BS0()
{
    int Sol = -1, L = 1, R = N;

    while(L<=R)
    {
        int Mid=(L+R)/2;
        if(V[Mid]==Value)
            {
                Sol=Mid;
                L=Mid+1;
            }
        else
            if(V[Mid]<Value)
                L=Mid+1;
            else
                R=Mid-1;
    }
    return Sol;
}

int BS1()
{
    int Sol = -1, L = 1, R = N;

    while(L<=R)
    {
        int Mid = (L + R) / 2;
        if(V[Mid]<=Value)
            {
                Sol = Mid;
                L = Mid + 1;
            }
        else
            R = Mid - 1;
    }
    return Sol;
}

int BS2()
{
    int Sol = -1, L = 1, R = N;

    while(L<=R)
    {
        int Mid = (L + R) / 2;
        if(V[Mid]>=Value)
            {
                Sol = Mid;
                R = Mid - 1;
            }
        else
            L = Mid + 1;
    }
    return Sol;
}

int main()
{
    int i;
    fin>>N;
    for(i = 1; i<=N; ++i)
        fin>>V[i];
    fin>>M;
    while(M--)
    {
        int op,v;
        fin>>op>>Value;
        if(op == 0)
            fout<<BS0()<<"\n";
        if(op == 1)
            fout<<BS1()<<"\n";
        if(op == 2)
            fout<<BS2()<<"\n";
    }
    return 0;
}