Pagini recente » Cod sursa (job #3194547) | Cod sursa (job #157620) | Cod sursa (job #1640470) | Cod sursa (job #2292444) | Cod sursa (job #2790852)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int NMAX = 100000;
int v[NMAX + 2], n;
void bs0(int x)
{
int st = 0, dr = n - 1, mij = dr - (dr - st) / 2;
while (st <= dr)
{
if (x < v[mij])
{
dr = mij - 1;
}
if (x >= v[mij])
{
st = mij + 1;
}
mij = dr - (dr - st) / 2;
}
if (dr < n && v[dr] == x)
fout << dr + 1 << '\n';
else
fout << "-1\n";
}
void bs1(int x)
{
int st = 0, dr = n - 1, mij = dr - (dr - st) / 2;
while (st <= dr)
{
if (x < v[mij])
{
dr = mij - 1;
}
if (x >= v[mij])
{
st = mij + 1;
}
mij = dr - (dr - st) / 2;
}
fout << dr + 1 << '\n';
}
void bs2(int x)
{
int st = 0, dr = n - 1, mij = dr - (dr - st) / 2;
while (st <= dr)
{
if (x <= v[mij])
{
dr = mij - 1;
}
if (x > v[mij])
{
st = mij + 1;
}
mij = dr - (dr - st) / 2;
}
fout << st + 1 << '\n';
}
int main()
{
int m, i, x, idk;
fin >> n;
for (i = 0; i < n; ++i)
fin >> v[i];
fin >> m;
while (--m)
{
fin >> idk >> x;
if (idk == 0)
{
bs0(x);
}
else if (idk == 1)
{
bs1(x);
}
else if (idk == 2)
{
bs2(x);
}
}
fin >> idk >> x;
if (idk == 0)
{
bs0(x);
}
else if (idk == 1)
{
bs1(x);
}
else if (idk == 2)
{
bs2(x);
}
return 0;
}