Cod sursa(job #321129)
Utilizator | Data | 6 iunie 2009 11:30:12 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.79 kb |
#include<stdio.h>
int a[100001],i,k,x,lo,hi,mid,m,n,ok;
int main()
{ freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
for(i=1;i<=m;i++) { scanf("%d %d",&k,&x);
lo=1;
hi=n;
ok=0;
while(lo<=hi&&!ok)
{ mid=lo+(hi-lo)/2;
if(a[mid]==x)ok=1;
else if(x>a[mid]) lo=mid+1;
else hi=mid-1;
}
if(k==0) { if(ok) { lo=mid;
while(a[lo]==x)lo++;
printf("%d\n",lo-1);
}
else printf("-1\n");
}
if(k==1) { if(a[mid]>x) { while(a[mid]>x) mid--;
printf("%d\n",mid);
}
else printf("%d\n",mid);
}
if(k==2) { if(a[mid]<x) { while(a[mid]<x) mid++;
printf("%d\n",mid);
}
else printf("%d\n",mid);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}