Pagini recente » Istoria paginii utilizator/erjan | Diferente pentru planificare/sedinta-20081010 intre reviziile 27 si 26 | Istoria paginii utilizator/vladserban1 | Istoria paginii utilizator/puya.tudor | Cod sursa (job #1762456)
#include <fstream>
using namespace std;
ifstream F ("cautbin.in");
ofstream G ("cautbin.out");
int v[100002], n, m, c, x;
int bs0(int y)
{
int st = 1, dr = n, mij, gasit = 0;
while (st <= dr && !gasit)
{
mij = (st + dr) / 2;
if (v[mij] == y)
gasit = 1;
else
{
if (v[mij] > y)
dr = mij - 1;
else
st = mij + 1;
}
}
if (!gasit)
return -1;
while (v[mij] == y && mij <= n) ++ mij;
return mij - 1;
}
int bs1(int y)
{
int st = 1, dr = n, mij, gasit = 0;
while (st < dr && !gasit)
{
mij = (st + dr) / 2;
if (v[mij] <= y)
st = mij + 1;
else
dr = mij;
}
mij = (st + dr) / 2;
if (v[mij] > y) -- mij;
return mij;
}
int bs2(int y)
{
int st = 1, dr = n, mij, gasit = 0;
while (st < dr && !gasit)
{
mij = (st + dr) / 2;
if (v[mij] < y)
st = mij + 1;
else
dr = mij;
}
mij = (st + dr) / 2;
if (v[mij] < y) ++ mij;
return mij;
}
int main()
{
F >> n;
for (int i = 1; i <= n; ++ i)
F >> v[i];
F >> m;
for (int i = 0; i < m; ++ i)
{
F >> c >> x;
if (!c) G << bs0(x) << '\n';
else if (c == 1) G << bs1(x) << '\n';
else if (c == 2) G << bs2(x) << '\n';
}
return 0;
}