Pagini recente » Cod sursa (job #1839893) | Cod sursa (job #817714) | Cod sursa (job #1050447) | Cod sursa (job #3250569) | Cod sursa (job #2285590)
#include <stdio.h>
using namespace std;
int caut(int *v, int n, int x, int tip_comp) {
int pos, i;
for (pos = 1; pos < n; pos <<= 1);
for (i = 0; pos; pos >>= 1)
if (i + pos <= n - 1 && v[i + pos] <= x)
i += pos;
if (tip_comp == 0 && v[i] != x)
return -1;
return i + 1;
}
int caut_reverse(int *v, int n, int x) {
int pos, i;
for (pos = 1; pos < n; pos <<= 1);
for (i = n - 1, pos >>= 1; pos; pos >>= 1)
if (i - pos >= 0 && v[i - pos] >= x)
i -= pos;
return i + 1;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int n, m, v[100000] = {0}, cod, x;
scanf("%i", &n);
for (int i = 0; i < n; i++)
scanf("%i", &v[i]);
scanf("%i", &m);
for (int i = 0; i < m; i++) {
scanf("%i %i", &cod, &x);
if (cod < 2)
printf("%i\n", caut(v, n, x, cod));
else
printf("%i\n", caut_reverse(v, n, x));
}
return 0;
}