Pagini recente » Cod sursa (job #1765728) | Cod sursa (job #1917244) | Cod sursa (job #2116075) | Cod sursa (job #1636443) | Cod sursa (job #2021275)
#include <bits/stdc++.h>
using namespace std;
int v[100005];
int cauta (int x, int logn, int n)
{
int best = 0;
for (int i = logn; i >= 0; --i)
if (best + (1<<i) <= n && v[best + (1<<i)] <= x)
best += (1<<i);
return best;
}
int main(int argc, char const *argv[])
{
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int n, m, logn;
fin >> n;
logn = 32 - __builtin_clz((unsigned int)(n));
for (int i = 1; i<=n; ++i)
fin >> v[i];
fin >> m;
for (int i = 1; i<=m; ++i)
{
int type, x;
fin >> type >> x;
if (type == 0)
{
int poz = cauta(x, logn, n);
if (v[poz] == x)
fout << poz << '\n';
else fout << "-1\n";
}
if (type == 1)
{
fout << cauta(x, logn, n) << '\n';
}
if (type == 2)
{
fout << cauta(x-1, logn, n)+1 << '\n';
}
}
return 0;
}