Pagini recente » Cod sursa (job #2024212) | Cod sursa (job #1567640) | Cod sursa (job #1898366) | Cod sursa (job #450130) | Cod sursa (job #2615079)
#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;
}