Pagini recente » Cod sursa (job #1423420) | Cod sursa (job #160794) | Cod sursa (job #553184) | Cod sursa (job #1986350) | Cod sursa (job #680411)
Cod sursa(job #680411)
#include<stdio.h>
#define MaxN 100005
int M, N, v[MaxN];
int search (int p, int u, int key) {
int m;
while (p <= u) {
m = (p + u) / 2;
if (v[m] <= key)
p = m + 1;
else
u = m - 1;
}
m = (p + u) / 2;
if (v[m] > key) m --;
if (v[m] == key)
return m;
return -1;
}
/*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;
}