Cod sursa(job #2462645)

Utilizator ParutixLungeanu Razvan Parutix Data 27 septembrie 2019 18:11:31
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int N , M , A[100001];

int Cerinta1(int X)
{
    int st = 1, dr = N , pozMax = -1;
    while(st <= dr)
    {
        int m = (st + dr) / 2;
        if(A[m] == X)
        {
            pozMax = m;
            st = m + 1;
        }
        if(A[m] > X)
        {
            dr = m - 1;
        }
        if(A[m] < X)
        {
            st = m + 1;
        }
    }
    return pozMax;
}

int Cerinta2(int X)
{
    int st = 1 , dr = N , pozMax;
    while(st <= dr)
    {
        int m = (st + dr) / 2;
        if(A[m] <= X)
        {
            st = m + 1;
            pozMax = m;
        }
        if(A[m] > X)
        {
            dr = m - 1;
        }
        if(A[m] < X)
        {
            st = m + 1;
        }
    }
    return pozMax;
}

int Cerinta3(int X)
{
    int st = 1 , dr = N , pozMin;
    while(st <= dr)
    {
        int m = (st + dr) / 2;
        if(A[m] < X)
        {
            st = m + 1;
        }
        else
        {
            pozMin = m;
            dr = m - 1;
        }
    }
    return pozMin;
}

int main()
{
    int i , Cer , Nr;
    fin >> N;
    for(i = 1 ; i <= N ; i++)
    {
        fin >> A[i];
    }
    fin >> M;
    for(i = 1 ; i <= M ; i++)
    {
        fin >> Cer >> Nr;
        switch(Cer)
        {
        case 0 :
            fout << Cerinta1(Nr) << "\n";
            break;

        case 1 :
            fout << Cerinta2(Nr) << "\n";
            break;

        case 2 :
            fout << Cerinta3(Nr) << "\n";
            break;
        }
    }
    return 0;
}