Cod sursa(job #2615079)

Utilizator Razvan22Avatar Razvan22 Data 13 mai 2020 17:08:14
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.7 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int nr_elem, elemente[100005], nr_intrebari, tip, valoare;

///Acesta functie returneaza cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir;
int pozMax(int numere[], int nr_elemente, int numar)
{
    int stanga=0;
    int dreapta=nr_elemente+1;
    while(stanga!=dreapta-1)
    {
        int mijloc=(stanga+dreapta)/2;
        if(numere[mijloc]<=numar)
            stanga=mijloc;
        else
            dreapta=mijloc;
    }
    return stanga;
}

int pozEgal(int numere[], int nr_elemente, int numar)
{
    int pozitie=pozMax(numere,nr_elemente,numar);
    if(numere[pozitie]==numar)
        return pozitie;
    else
        return -1;
}

///Aceasta functie returneaza cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir;
int pozMin(int numere[], int nr_elemente, int numar)
{
    int stanga=0;
    int dreapta=nr_elemente+1;
    while(stanga!=dreapta-1)
    {
        int mijloc=(stanga+dreapta)/2;
        if(numere[mijloc]>=numar)
            dreapta=mijloc;
        else
            stanga=mijloc;
    }
    return dreapta;
}

int main()
{
    fin>>nr_elem;
    for(int i=1;i<=nr_elem;i++)
        fin>>elemente[i];
    fin>>nr_intrebari;
    for(int i=1;i<=nr_intrebari;i++)
    {
        fin>>tip>>valoare;
        if(tip==0)
            fout<<pozEgal(elemente,nr_elem,valoare)<<"\n";
        if(tip==1)
            fout<<pozMax(elemente,nr_elem,valoare)<<"\n";
        if(tip==2)
            fout<<pozMin(elemente,nr_elem,valoare)<<"\n";
    }
    return 0;
}