Pagini recente » Cod sursa (job #1044980) | Cod sursa (job #183036) | Cod sursa (job #1015968) | Cod sursa (job #276517) | Cod sursa (job #2037314)
#include <fstream>
std::ifstream fin("cautbin.in");
std::ofstream fout("cautbin.out");
int cautare_binara(int a[100001], int n, int y);
int main()
{
int n, m, a[100001], x, y, pozitie{-1};
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> a[i];
fin >> m;
for (int i = 1; i <= m; ++i)
{
fin >> x >> y;
if (x == 0)
{
pozitie = cautare_binara(a, n, y);
if (a[pozitie] != y)
fout << -1 << '\n';
else
{
while (a[pozitie] == a[pozitie + 1])
pozitie++;
fout << pozitie << '\n';
}
}
if (x == 1)
{
pozitie = cautare_binara(a, n, y);
if (a[pozitie] > y)
{
while (a[pozitie] == a[pozitie - 1])
pozitie--;
fout << pozitie - 1 << '\n';
}
if (a[pozitie] == y)
{
while (a[pozitie] == a[pozitie + 1])
pozitie++;
fout << pozitie << '\n';
}
if (a[pozitie] < y)
{
while (a[pozitie] == a[pozitie + 1])
pozitie++;
fout << pozitie << '\n';
}
}
if (x == 2)
{
pozitie = cautare_binara(a, n, y);
if (a[pozitie] > y)
{
while (a[pozitie] == a[pozitie - 1])
pozitie--;
fout << pozitie << '\n';
}
if (a[pozitie] == y)
{
while (a[pozitie] == a[pozitie - 1])
pozitie--;
fout << pozitie << '\n';
}
if (a[pozitie] < y)
{
while (a[pozitie] == a[pozitie + 1])
pozitie++;
fout << pozitie + 1 << '\n';
}
}
}
}
int cautare_binara(int a[100001], int n, int y)
{
int right = 1, left = n, middle;
while (right <= left)
{
middle = left + (right - left) / 2;
if (a[middle] == y)
return middle;
if (a[middle] > y)
left = middle - 1;
else
right = middle + 1;
}
return middle;
}