Cod sursa(job #1986574)
Utilizator | Data | 28 mai 2017 17:00:24 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.06 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int main()
{
int n, m, v[100000], i, x, intreb, d, s, mij, poz;
f >> n;
for(i = 1; i <= n; i++)
f >> v[i];
f >> m;
s = 1;
d = n;
for(i = 0; i < m; i++)
{
f >> intreb >> x;
if(intreb == 0)
{
s = 1;
d = n;
poz = -1;
while(s <= d)
{
mij = s + (d-s)/2;
if(v[mij] == x)
poz = mij;
if(x < v[mij])
d = mij - 1;
else
s = mij + 1;
}
g << poz << '\n';
}
else
if(intreb == 1)
{
s = 1;
d = n;
poz = -1;
while(s <= d)
{
mij = s + (d-s)/2;
if(x >= v[mij])
{
poz = mij;
s = mij + 1;
}
else
d = mij - 1;
}
g << poz << '\n';
}
else if(intreb == 2)
{
s = 1;
d = n;
poz = -1;
int ok = 0;
int pozmin;
while(s <= d)
{
mij = s + (d-s)/2;
if(x <= v[mij])
{
ok++;
poz = mij;
d = mij - 1;
if(ok == 1)
pozmin = mij;
if(poz < pozmin)
pozmin = poz;
}
else
s = mij + 1;
}
g << pozmin;
}
}
return 0;
}