Pagini recente » Cod sursa (job #2375528) | Cod sursa (job #783342) | Cod sursa (job #2677368) | Cod sursa (job #2524420) | Cod sursa (job #2278938)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int x[100001], ok;
int cautbin0(int st, int dr, int nr)
{
if(st <= dr)
{
int mij = (st + dr) / 2;
if (x[mij] == nr && x[mij + 1] != nr)
{ok =1;
return mij;
}
if(x[mij] > nr)
return cautbin0(st, mij - 1, nr);
else
return cautbin0(mij + 1, dr, nr);
}
}
int cautbin1(int st, int dr, int nr)
{
if(st <= dr)
{
int mij = (st + dr) / 2;
if (x[mij] <= nr && x[mij + 1] > nr)
return mij;
if (x[mij] > nr)
return cautbin1(st, mij - 1, nr);
else
return cautbin1(mij + 1, dr, nr);
}
}
int cautbin2(int st, int dr, int nr)
{
if(st <= dr)
{
int mij = (st + dr) / 2;
if (x[mij] >= nr && x[mij - 1] < nr)
return mij;
if(x[mij] >= nr)
return cautbin2(st, mij - 1, nr);
else
return cautbin2(mij + 1, dr, nr);
}
}
int main()
{ int n, i, k, cond, nr;
f >> n;
for (i = 1; i <= n; i++)
f >> x[i];
f >> k;
for (i = 1; i <= k; i++)
{
f >> cond >> nr; ok = 0;
if (cond == 0)
{ int poz = cautbin0(1, n, nr);
if(ok == 0)
g << -1 << "\n";
else
g << poz << "\n";
}
if(cond == 1)
g << cautbin1(1, n, nr) << "\n";
if(cond == 2)
g << cautbin2(1, n, nr) << "\n";
}
return 0;
}