Pagini recente » Cod sursa (job #1613027) | Cod sursa (job #2393745) | Cod sursa (job #2519826) | Cod sursa (job #1367621) | Cod sursa (job #390406)
Cod sursa(job #390406)
#include<cstdio>
const int N = 1<<17;
int v[N],n;
int caut0(int x)
{
int i,pas = N;//pas trebuie sa fie o putere a lui 2
for(i=0 ; pas ; pas>>=1)//pas>>=1 e echivalent cu pas/=2
if(i+pas <= n && v[i+pas] <= x)
i += pas;
if(i==0 || v[i] != x)
return -1;
return i;
}
int caut1(int x)
{
int i,pas=N;
for(i=0;pas;pas>>=1)
if(i+pas<=n && v[i+pas]<=x)
i+=pas;
return i;
}
int caut2(int x)
{
int i,pas=N;
--x;
for(i=0;pas;pas>>=1)
if(i+pas<=n && v[i+pas]<=x)
i+=pas;
return 1+i;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i,m,tip,x;
scanf("%d",&n);
for(i=1 ; i<=n ; ++i)
scanf("%d",&v[i]);
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&tip,&x);
if(tip == 0)
printf("%d\n",caut0(x));
if(tip==1)
printf("%d\n",caut1(x));
if(tip==2)
printf("%d\n",caut2(x));
}
return 0;
}