Pagini recente » Cod sursa (job #1800856) | Cod sursa (job #2741356) | Atasamentele paginii eusebiu92 | Atasamentele paginii Clasament lotj1 | Cod sursa (job #2037079)
#include <fstream>
std::ifstream fin("cautbin.in");
std::ofstream fout("cautbin.out");
void read();
int cautare1(int l, int r, int v);
int cautare2(int l ,int r, int v);
int cautare3(int l, int r, int v);
int a[100000], n, m, nrOp, val;
int main()
{
read();
while(m--)
{
fin >> nrOp >> val;
if (nrOp == 0)
{
fout << cautare1(1, n, val) << '\n';
}
if (nrOp == 1)
{
fout << cautare2(1, n, val) << '\n';
}
if (nrOp == 2)
{
fout << cautare3(1, n, val) << '\n';
}
}
}
void read()
{
fin >> n;
for(int i {1}; i <= n; ++i)
{
fin >> a[i];
}
fin >> m;
}
int cautare1(int l, int r, int v)
{
int m, poz{-1};
while(l <= r)
{
m = (l + r) / 2;
if (a[m] <= v)
{
l = m + 1;
}
else
{
r = m - 1;
}
if (a[m] == v)
{
poz = m;
}
}
return poz;
}
int cautare2(int l ,int r, int v)
{
int m, poz{-1};
while (l <= r)
{
m = (l + r) / 2;
if (a[m] <= v)
l = m + 1, poz = m;
else
r = m - 1;
}
return poz;
}
int cautare3(int l, int r, int v)
{
int m, poz{-1};
while (l <= r)
{
m = (l + r) / 2;
if (a[m] >= v)
r = m - 1, poz = m;
else
l = m + 1;
}
return poz;
}