Pagini recente » Cod sursa (job #928380) | Cod sursa (job #2207522) | Cod sursa (job #1850362) | Cod sursa (job #1634190) | Cod sursa (job #536527)
Cod sursa(job #536527)
#include<cstdio>
const int N=100001;
int x[N];
int binary_search1(int value,int n)
{
int step,i;
for (step=1;step<=n;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=n && x[i+step]<=value)
i+=step;
return i;
}
int binary_search2(int value,int n)
{
int step,i;
for (step=1;step<=n;step<<=1);
for (i=n;step;step>>=1)
if (i-step<=n && x[i-step]>=value)
i-=step;
return i;
}
int main()
{
int i,n,m,res,tip,value;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&x[i]);
scanf("%d",&m);
for (;m;--m)
{
scanf("%d %d",&tip,&value);
if (tip<2)
{
res=binary_search1(value,n);
if (!tip&&x[res]!=value) printf("-1\n");
else printf("%d\n",res);
continue;
}
printf("%d\n",binary_search2(value,n));
}
return 0;
}