Pagini recente » Cod sursa (job #2619112) | Cod sursa (job #2403621) | Cod sursa (job #2708481) | Cod sursa (job #435795) | Cod sursa (job #680405)
Cod sursa(job #680405)
#include<stdio.h>
#define MaxN 100005
int M, N, v[MaxN];
int search(int li, int ls, int x){
int mid;
if(li == ls){
if( v[li] == x)
return li;
else
return -1;
}
else{
mid = (li+ls)/2;
if(x > v[mid])
return search(mid+1, ls, x);
else
return search(li, mid, x);
}
}
int main(){
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int i, poz, op, x, j;
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", &op, &x);
poz = search(0, N-1, x);
switch (op){
case 0: if(poz == -1){
printf("%d\n", poz);
break;
}
j = poz;
while(v[j] == x && j < N)
j++;
printf("%d\n", j);
break;
case 1: while(poz == -1){
x--;
poz = search(0, N-1, x);
}
j = poz;
while(v[j] == x && j < N)
j++;
printf("%d\n", j);
break;
case 2: while(poz == -1){
x++;
poz = (search(0, N-1, x));
}
j = poz;
while(v[j] == x && j >= 0)
j--;
printf("%d\n", j + 2);
break;
}
}
fclose(stdin);
fclose(stdout);
return 0;
}