Pagini recente » Cod sursa (job #2234041) | Cod sursa (job #1166378) | Cod sursa (job #3259787) | Cod sursa (job #2808704) | Cod sursa (job #870251)
Cod sursa(job #870251)
#include<stdio.h>
int n,m,v[100002],a,b,i,x;
int cb1(int b){
int i, step;
for (step = 1; step < n; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step + 1< n && v[i + step + 1] <= b)
i += step;
return i+1;
}
int cb2(int b){
int i, step;
for (step = 1; step < n; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step + 1< n && v[i + step + 1] < b)
i += step;
return i+1;
}
int main(){
freopen("cautbin.in","rt",stdin);
freopen("cautbin.out","wt",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%d",v+i);
}
scanf("%d",&m);
for (i=1;i<=m;i++){
scanf("%d%d",&a,&b);
//cautarea binara
//afisarea rezultatului
if (a==0){
x=cb1(b);
if (v[x]!=b)x=-1;
}
if (a==1){
x=cb1(b);
}
if (a==2){
x=1+cb2(b);
if (v[x]!=b)x=x+1;
}
printf("%d\n",x);
}
fclose(stdin);
fclose(stdout);
return 0;
}