Cod sursa(job #1902126)
Utilizator | Data | 4 martie 2017 13:45:21 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.33 kb |
#include <fstream>
using namespace std;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int v[100000];
int main()
{
int n, nr, m, x, intr, med, st = 0, dr, j, i, aux;
bool gasit = 0;
in >> n;
dr = n;
for (i = 0; i < n; i++)
in >> v[i];
in >> m;
for (i = 1; i <= m; i++)
{
in >> intr >> x;
if (intr == 0)
{
while (med)
{
med = (dr + st) / 2;
if (x > v[med])
st = med;
if (x < v[med])
dr = med;
if (v[med] == x)
{
gasit = 1;
aux = med;
j = med;
while (v[j] == x)
{
j++;
}
break;
}
}
if(gasit == 0)
out<< "-1" << '\n';
else
out << j << '\n';
}
dr = n;
st = 0;
if(intr == 1)
{
while (med)
{
med = (dr + st) / 2;
if (x > v[med])
st = med;
if (x < v[med])
dr = med;
if (v[med] <= x)
{
gasit = 1;
aux = med;
j = med;
while (v[j] <= x && v[j] != 0)
{
j++;
}
break;
}
}
out << j << '\n';
}
dr = n;
st = 0;
if (intr == 2)
{
while (med)
{
med = (dr + st) / 2;
if (x > v[med])
dr = med;
if (x < v[med])
st = med;
if (v[med] >= x)
{
gasit = 1;
aux = med;
j = med;
while (v[j] > x)
{
j--;
}
break;
}
}
out << j << '\n';
}
}
return 0;
}