Pagini recente » Cod sursa (job #3341220) | Cod sursa (job #3323506) | Cod sursa (job #1016018) | Cod sursa (job #2310835) | Cod sursa (job #3324676)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
const int NMAX = 1e6;
int i, j, k, n;
int a[NMAX + 5], b[NMAX + 5];
int pozitie_egala (int k)
{
int st = 1, dr = n, poz = -1;
while (st <= dr)
{
int mij = st + (dr - st) / 2;
if (a[mij] == k)
{
poz = mij;
st = mij + 1;
} else {
if (a[mij] < k)
st = mij + 1;
else
dr = mij - 1;
}
}
return poz;
}
int pozitie_mare (int k)
{
int st = 1, dr = n, poz = -1;
while (st <= dr)
{
int mij = st + (dr - st) / 2;
if (a[mij] <= k)
{
poz = mij;
st = mij + 1;
} else dr = mij - 1;
}
return poz;
}
int pozitie_mica (int k)
{
int st = 1, dr = n, poz = -1;
while (st <= dr)
{
int mij = st + (dr - st) / 2;
if (a[mij] >= k)
{
poz = mij;
dr = mij - 1;
} else st = mij + 1;
}
return poz;
}
int main()
{
int m;
in >> n;
for (i = 1; i <= n; i++)
in >> a[i];
in >> m;
while (m--)
{
int a, b;
in >> a >> b;
if (a == 0) out << pozitie_egala(b) << '\n';
if (a == 1) out << pozitie_mare(b) << '\n';
if (a == 2) out << pozitie_mica(b) << '\n';
}
return 0;
}