Pagini recente » Cod sursa (job #220922) | Cod sursa (job #1781651) | Cod sursa (job #1907177) | Cod sursa (job #1237243) | Cod sursa (job #2526891)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int nmax = 100005;
int v[nmax], n, m;
int caut_binar1_0(int x,int op)
{
int m, st, dr, poz = -1;
st = 1, dr = n;
bool ok=0;
while (st <= dr)
{
m = st + (dr - st) / 2;
if (v[m] > x)
dr = m - 1;
else if (v[m] <= x)
{
poz = m, st = m + 1;
if(v[m]==x)ok=1;
}
}
if(op==0)
{
if(ok)
return poz;
else
return -1;
}
return poz;
}
int caut_binar2(int x)
{
int m, st, dr, poz = -1;
st = 1, dr = n;
while (st < dr)
{
m = st + (dr - st) / 2;
if (v[m] >= x)
dr = m, poz = m;
else if (v[m] < x)
st = m + 1;
}
return poz;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
fin >> m;
for (int i = 1; i <= m; i++)
{
int op, x;
fin >> op >> x;
if (op == 0 || op == 1)
{
fout << caut_binar1_0(x,op) << "\n";
}
else
{
fout << caut_binar2(x) << "\n";
}
}
}