Pagini recente » Cod sursa (job #1411271) | Cod sursa (job #954895) | Cod sursa (job #2903347) | Cod sursa (job #2406935) | Cod sursa (job #2562936)
#include <cstdio>
#include <vector>
using namespace std;
vector<int> v;
int upper_bound(int x)
{
int li = 0, lf = (int)v.size() - 1, m;
while (li <= lf) {
m = li + ((lf - li) >> 1);
if (v[m] <= x)
li = m + 1;
else
lf = m - 1;
}
return lf;
}
int lower_bound(int x)
{
int li = 0, lf = (int)v.size() - 1, m;
while (li <= lf) {
m = li + ((lf - li) >> 1);
if (v[m] >= x)
lf = m - 1;
else
li = m + 1;
}
return li;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int N, M;
scanf("%d", &N);
for (int i = 0; i < N; ++i) {
int x;
scanf("%d", &x);
v.emplace_back(x);
}
scanf("%d", &M);
for (int i = 0; i < M; ++i) {
int op, x;
scanf("%d%d", &op, &x);
if (op == 0) {
int pz = upper_bound(x);
if (v[pz] == x)
printf("%d\n", pz + 1);
else
printf("-1\n");
continue;
}
if (op == 1) {
printf("%d\n", upper_bound(x) + 1);
continue;
}
printf("%d\n", lower_bound(x) + 1);
}
return 0;
}