Pagini recente » Cod sursa (job #1828704) | Cod sursa (job #2172400)
#include <stdio.h>
#define SIZE 100000
static int v[SIZE];
static int cb(int x, int n)
{
int mid, pos;
for (mid = 1; mid < n; mid <<= 1)
;
for (pos = 0; mid; mid >>= 1) {
if (pos + mid < n && v[pos + mid] <= x) {
pos += mid;
}
}
return pos;
}
static int cb2(int x, int n)
{
int mid, pos;
for (mid = 1; mid < n; mid <<= 1)
;
for (pos = n - 1; mid; mid >>= 1) {
if (pos - mid >= 0 && v[pos - mid] >= x) {
pos -= mid;
}
}
return pos;
}
int main(void)
{
int n, m, i, op, x, r;
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &v[i]);
}
scanf("%d", &m);
while (m--) {
scanf("%d %d", &op, &x);
if (op == 0) {
r = cb(x, n);
printf("%d\n", v[r] == x ? r + 1 : -1);
} else if (op == 1) {
r = cb(x, n);
printf("%d\n", r + 1);
} else if (op == 2) {
r = cb2(x, n);
printf("%d\n", r + 1);
}
}
return 0;
}