Pagini recente » Cod sursa (job #784057) | Cod sursa (job #1879393) | Cod sursa (job #1744904) | Cod sursa (job #547257) | Cod sursa (job #1487994)
#include <bits/stdc++.h>
using namespace std;
int n, nr, op, m, poz;
int v[100005];
int cbin(int m)
{
long long nr = 1;
int rezultat = 0;
for (nr = 1; nr <= n; nr <<= 1);
for (; nr; nr >>= 1)
if (rezultat + nr <= n && v[rezultat + nr] <= m)
rezultat += nr;
return rezultat;
}
int cbin2(int m)
{
long long nr = 1;
int rezultat = n;
for (nr = 1; nr <= n; nr <<= 1);
for (; nr; nr >>= 1)
if (rezultat - nr >= 1 && v[rezultat - nr] >= m)
rezultat -= nr;
return rezultat;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &v[i]);
scanf("%d", &m);
for (int i = 1; i <= m; i++)
{
scanf("%d %d", &op, &m);
if (op < 2) poz = cbin(m);
if (!op) printf("%d\n", v[poz] == m ? poz : -1);
else if (op == 1) printf("%d\n", poz);
else printf("%d\n", cbin2(m));
}
return 0;
}