Pagini recente » Cod sursa (job #555828) | Cod sursa (job #3233816) | Cod sursa (job #2688782) | Cod sursa (job #2231486) | Cod sursa (job #323128)
Cod sursa(job #323128)
#include <stdio.h>
#include <stdlib.h>
#define SMAX 100000
int v[SMAX];
int bs(int e, int n)
{
int s = 0;
int d = n-1;
int m;
while(s <= d){
m = (s + d) / 2;
if(v[m] == e)
return m;
else if(e < v[m])
d = m - 1;
else
s = m + 1;
}
return d;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int i, n, m, c, x, p;
scanf("%d", &n);
for(i = 0; i < n; ++i)
scanf("%d", v+i);
scanf("%d", &m);
for(i = 0; i < m; i++){
scanf("%d%d", &c, &x);
p = bs(x, n);
if(c == 0 ){
while(p < n-1 && v[p+1] == x)
p++;
if(v[p] == x)
printf("%d\n", p+1);
else
printf("-1\n");
}
else if(c == 1 ){
while(p > 0 && v[p-1] <= x)
p--;
printf("%d\n", p+1);
}
else if(c == 2 ){
while(p < n-1 && v[p+1] <= x)
p++;
if(v[p] == x)
p--;
printf("%d\n", p+2);
}
}
return 0;
}