Mai intai trebuie sa te autentifici.
Cod sursa(job #331350)
Utilizator | Data | 13 iulie 2009 19:37:38 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.04 kb |
#include<stdio.h>
int v[100005],lo, hi, mid, soll;
int N, T, x, y;
int zero(int sol)
{
for(lo=1,hi=N;lo<=hi;)
{mid = lo + (hi-lo)/2;
if(v[mid]<sol)lo=mid+1;
else if(v[mid]>sol)hi=mid-1;
else if(v[mid]==sol)return mid;
}
return -1;
}
int unu(int sol)
{ for(lo=1,hi=N;lo<=hi;)
{mid = lo + (hi-lo)/2;
if(v[mid]==sol)return mid;
else if(v[mid]<sol){soll=mid;lo=mid+1;}
else if(v[mid]>sol)hi=mid-1;
}
return soll;
}
int doi(int sol)
{ for(lo=1,hi=N;lo<=hi;)
{mid = lo + (hi-lo)/2;
if(v[mid]==sol)return mid;
else if(v[mid]<sol)lo=mid+1;
else if(v[mid]>sol){hi=mid-1;soll=mid;}
}
return soll;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&N);
for(T=1;T<=N;T++)
scanf("%d",&v[T]);
scanf("%d",&T);
for(;T;--T)
{
scanf("%d%d",&x,&y);
if(!x)printf("%d\n",zero(y));
else if(x==1)printf("%d\n",unu(y));
else printf("%d\n",doi(y));
}
return 0;
}