Cod sursa(job #2118441)

Utilizator CozmaCatalinCozma Catalin CozmaCatalin Data 30 ianuarie 2018 17:38:29
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include <iostream>
#include <fstream>
#define MAX 100005

using namespace std;

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

long long V[MAX];


int N,NrCerinte;

void Read()
{
    in >> N;
    for ( int i = 1; i <= N ; ++i)
    {
        long long  x;
        in >> x;
        V[i] = x;
    }
}

void CautBin0(int K)
{
    bool OK = false;
    int st = 1;
    int dr = N;
    int IndiceMax;

    while( st <= dr )
    {
        int mij = st + (dr - st)/2;

        if(V[mij] == K)
        {
            OK = true;
            IndiceMax = mij;
            st = mij+1;
        }

        else if(V[mij] < K )
                st = mij+1;
          else dr = mij-1;
    }

    if(OK == true) out << IndiceMax<<"\n";
    else out << -1 <<"\n";
}

void CautBin1(int K)
{
    int st = 1;
    int dr = N;
    int PozMin;

    while( st <= dr )
    {
        int mij = st + (dr-st)/2;

        if(V[mij] <= K )
        {
            PozMin = mij;
            st = mij+1;
        }

        if(V[mij] > K)
            dr = mij-1;


    }

    out << PozMin <<"\n";

}

void CautBin2(int K)
{
    int st = 1;
    int dr = N;
    int PozMin;

    while( st <= dr )
    {
        int mij = st + (dr-st)/2;

        if(V[mij] >= K)
        {
            PozMin = mij;
            dr = mij-1;
        }
        if(V[mij] < K)
            st = mij+1;


    }
    out << PozMin <<"\n";
}

int main()
{
    Read();

    in >> NrCerinte;

    while(NrCerinte)
    {
        int Type, Number;

        in >> Type >> Number;

        if(Type == 0 ) CautBin0(Number);
        if(Type == 1 ) CautBin1(Number);
        if(Type == 2 ) CautBin2(Number);

        NrCerinte--;
    }


}