Cod sursa(job #869662)
Utilizator | Data | 1 februarie 2013 22:21:57 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.19 kb |
#include<stdio.h>
int n,x,v[10000],m,k,tip;
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d",&v[i]);
scanf("%d",&k);
for(int j=1;j<=k;j++)
{
scanf("%d%d",&tip,&x);
int st=0, dr=n+1;
if(tip==0)
{
while(st+1<dr)
{
m=(st+dr)/2;
if(x<v[m])
dr=m;
else
st=m;
}
if(v[st]==x)
printf("%d\n",st);
else printf("-1\n");
}
else
if(tip==1)
{
while(st+1<dr)
{
m=(st+dr)/2;
if(x>=v[m])
st=m;
else
dr=m;
}
printf("%d\n",st);
}
else
if(tip==2)
{
while(st+1<dr)
{
m=(st+dr)/2;
if(x<=v[m])
dr=m;
else
st=m;
}
printf("%d\n",dr);
}
}
return 0;
}